2017-04-15 1 views
0

ここで何が間違っていますか? 私は現在の行のdatedebut値に90日間を追加することを意図しているSQL TRIGGERSコンパイルエラー

dateFin = DATEADD(day,90,dateDebut); 

を推測している

CREATE TRIGGER DateFinDebut AFTER INSERT OR UPDATE OF dateFin ON SessionUQAM 
FOR EACH ROW 
BEGIN 
    dateFin = DATEADD(day,90,dateDebut); 
END; 
/

Warning: Trigger created with compilation errors. 
+4

'show errors'を使用してください。しかし、Oracleには 'dateadd()'はありません。そして、あなたはそのような列に値を割り当てることはできません。マニュアルを参照してください。http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/triggers.htm#LNPLS020 –

+0

助けてくれてありがとう! – Phil

+0

また、通常、同じテーブル内の列を更新するトリガーは、「AFTER」トリガーではなく「BEFORE」トリガーになります。また、 'dateFin'を仮想カラムにして、トリガーについて全く気にしない方が良いでしょう。 –

答えて

1

私は私のトリガと警告メッセージを得続けます。

Oracleでは、dateadd機能はありません。日付に数日を追加するだけです。トリガでは、疑似レコード:newを使用して現在の行を参照する必要があります。ツールのようなSQL Developer(無料)とPL/SQL Developer(商用)より対話的に一覧表示されますが、

:new.datefin := :new.datedebut +90; 

あなたは、SQLでのコンパイルエラー* Plusのshow errorsを使用して一覧表示することができます。

+0

お返事ありがとうございます!私はあなたのコードを試してみましたが、私は "ORA-04082:NEWまたはOLD参照はテーブルレベルのトリガーでは許可されていません"というメッセージが表示されます。< :new >を試しても、コンパイルエラーが発生しました... AFTERの代わりに、運がなくても:( – Phil

+0

'行ごとに'は ':new'と':old'を参照できる行レベルのトリガーになります。そうでなければ、テーブルレベルのトリガーです。 –

+0

うん、それは今働く、多くのthx! – Phil