行レベルのトリガをOracleに書き込むときに、OLD
とNEW
疑似レコードを使用して、トリガを起動した行の古い状態と新しい状態を参照できることがわかりました。 INSERT
トリガーOLD
にはデータが含まれていませんが、このトリガーに対するWHEN
句の評価にどのように影響するかはわかりません。私は、次のトリガーがある場合たとえば、:OLDへの参照は、Oracle挿入トリガのWHEN原因で何を評価するのですか?
CREATE OR REPLACE TRIGGER mung_row
BEFORE INSERT OR UPDATE ON some_table
FOR EACH ROW
BEGIN
:NEW.foo = 'some val';
END;
を、私はfooが以前にnullをしたときにのみ更新時に実行するには、このトリガーを変更するが、常に挿入時に実行したい、私はの更新部分を満たすことができWHERE
句を追加して変更しました。
CREATE OR REPLACE TRIGGER mung_row
BEFORE INSERT OR UPDATE ON some_table
FOR EACH ROW
WHEN (OLD.foo IS NULL)
BEGIN
:NEW.foo = 'some val';
END;
これは、挿入時に問題が発生しますか?でOLD.fooは何を評価しますか?
私はINSERT
とUPDATE
トリガーを分割したり、トリガー本体にINSERTING
/UPDATING
/DELETING
を使用することができることを認識してんだけど、私はこの質問にインスピレーションを与えた場合にはむしろないと思います。