1

ORACLE SQL DEVELOPERを使用してORACLEでTRIGGERを作成しようとしていますが、開始日予約から予約日またはサービス料の日付として入力された日付が、レコードに挿入されている現在の日付以上になることを確認します。

これらは私のテーブルのフィールドです

Service (date_service, cost_variation, number_room, id_service);

これは私のコードです:

CREATE OR REPLACE TRIGGER VERIFY_DATE
BEFORE INSERT OR UPDATE OF FECHA_PLAN ON SERVICE
FOR EACH ROW
DECLARE
  fecha_ac DATE;
BEGIN
  SELECT SYSDATE INTO fecha_ac FROM DUAL;
  IF(:NEW.FECHA_PLAN > fecha_ac)THEN
    dbms_output.put_line('The date of the plan should be more than the current date ');
    raise_application_error(-20601, 'Dato invalido');
  END IF;
END;

これは、TRIGGERを実行しようとしたときに発生するエラーです。

INSERT INTO "MIGRARBD"."SERVICE" 
    (date_service, cost_variation, number_room, id_service) 
VALUES 
    (TO_DATE('20/01/10', 'DD/MM/RR'), '2', '1', '1')

テーブル"MIGRARBD"。"SERVICE"への変更を保存するときにエラーが発生しました:

Fila 1: ORA-20601: Dato invalido
ORA-06512: en "MIGRARBD.VERIFICAR_FECHA", línea 7
ORA-04088: error during execution of trigger 'MIGRARBD.VERIFICAR_FECHA'
ORA-06512: on line 1

私はあなたが助けてくれることを願っています...そして私の英語を許します

4

3 に答える 3

4

FECHA_PLANテーブルの定義方法と一致しないトリガー参照。と同じだと考えられDATE_SERVICEます。

コーディングしたように、入力された日付が現在の日付より後の場合、トリガーは失敗します。しかし、あなたが言うとき...

入力された日付が...レコードに挿入された現在の日付以上になることを確認します。

...おそらく、日付が現在の日付以上でなければならないというルールを適用する必要があります。その場合、入力された日付が現在の日付より前の場合、トリガーは失敗するはずです。このような ...

IF(:NEW.FECHA_PLAN < sysdate )THEN

sysdate直接使用できるため、は不要であることに注意してくださいselect ... from dual(同じ値を複数回使用したいというコメントで Rene が指摘している場合を除きます)。

これで問題が解決しない場合は、もう少し説明する必要があります。

于 2010-01-26T22:14:00.560 に答える
2

あなたの日付の比較は、あなたが望んでいたものと逆ではありませんか? 挿入された日付が SYSDATE より大きい場合、エラーが発生します。新しいレコードに挿入された日付より後の SYSDATE をテストするべきではありませんか? これを試して:

  IF(fecha_ac >= :NEW.FECHA_PLAN)THEN
    dbms_output.put_line('The date of the plan should be more than the current date ');
    raise_application_error(-20601, 'Dato invalido');
  END IF;
于 2010-01-27T00:12:53.580 に答える
0

トリガーでカスタム 20601 エラーが発生した場合、トリガーが正常にコンパイルされて機能し、問題がロジックにあることを意味します。あなたの質問では、過去または将来の日付を許可しないかどうかが十分に明確ではありません。言い換えれば、fecha プランが将来でなければならない場合、オペレーターは間違っています。過去の日付である必要がある場合は、問題ありません。

そうは言っても、ビジネスロジックをトリガーに入れるのは良い考えではありません。

于 2010-01-27T23:43:51.043 に答える