私はPL/SQL
の初心者です。私は、トリガーを介して非常に複雑なデータ整合性チェックをしようとしています。INSTERTまたはUPDATEのPL/SQLトリガー: ":NEW" IS NULL =>あいまいですか?
私はすでに同じテーブル(一時的な外部テーブルを介して)で使用されているトリガー内のテーブルを呼び出すときに問題を回避する方法を理解しましたが、今私は本当に心配している問題に直面しています。 ":NEW"
は私のテーブルAFTER
の値を参照していましたが、物事はそれほど単純ではありません...更新または挿入によって新しい値SET
...何も指定されていなければNULL
に見えます。更新後に対応するフィールド値はNOT NULL
...私を狂わせてしまっています。
複数の変数を挿入または更新するときに私のトリガーが設定されている:
CREATE OR REPLACE TRIGGER TRG_INS_UP_INSTRUMENT_EVENT
AFTER INSERT OR UPDATE OF EVENT_ID, DATE_BEGIN,DATE_END,INSTR_ID,TYPE_EVENT_ID ON AIS_INSTRUMENT_EVENT
しかし、今はすでに、私はそこにnull以外のフィールドを持つ行であると私は
UPDATE AIS_INSTRUMENT_EVENT SET INSTR_ID='642' WHERE EVENT_ID='6479'
をすれば...実際には":NEW.DATE_BEGIN"
となります。これはNULL
...というイベントも考えられませんし、古い値や新しい値はNULLです(私はそれを更新しなかっただけなので)。
はどのようにして区別することができます - 私の引き金に - DATE_BEGIN
が何も指定されていない(このフィールドは、このように同じまま必ずしも必要ではないがNULL必要があるケースからNULL
に更新し、SET
自主的な場合を... )。私は一つ一つをチェックするために多くの可能な組み合わせにしなければならない...
あなたの助けを前もってありがとう!
これは、実行しようとしていること(つまり、テーブルとトリガーのDDL、入力データと期待される出力の完全なテストケース)を提供できる場合に役立ちます.NBこれはあなたの正確なテーブル(例えば、カラム/テーブル/トリガが呼び出されているかどうかは気にしませんが、解決しようとしている問題を再現する必要があります)。 ':new'値がnullであると考えさせているのは何ですか? – Boneist