:NEW
および:OLD
PLSQLブロックでは、その使用法を理解するのが非常に難しいと感じています。
通常、 trigger を使用して:old
は古い値を参照し、:new
新しい値を参照します。
上記にリンクされているOracleドキュメントの例を次に示します
CREATE OR REPLACE TRIGGER Print_salary_changes
BEFORE DELETE OR INSERT OR UPDATE ON Emp_tab
FOR EACH ROW
WHEN (new.Empno > 0)
DECLARE
sal_diff number;
BEGIN
sal_diff := :new.sal - :old.sal;
dbms_output.put('Old salary: ' || :old.sal);
dbms_output.put(' New salary: ' || :new.sal);
dbms_output.put_line(' Difference ' || sal_diff);
END;
この例では、トリガーはBEFORE DELETE OR INSERT OR UPDATE
:old.sal
には、トリガーを起動する前の給与と:new.sal
には新しい値が含まれます。
:Newおよび:Old Valueは、DMLステートメントで区別できます。
挿入-:Old = NULL :New=新しい値を挿入
pdate-:Old = Updateステートメントがトリガーされる前にテーブルに存在する値:New = Updateに新しい値を指定
削除-:古い =削除前の値:新規 = NULL
:oldおよび:newは、行レベルトリガーを使用するときに行レベルデータにアクセスするために参照される擬似レコードです。
以下の操作の場合、それぞれの古い値と新しい値:
例えば:
CREATE OR REPLACE TRIGGER get_dept
BEFORE DELETE OR INSERT OR UPDATE ON employees
FOR EACH ROW
BEGIN
DBMS_OUTPUT.PUT('Old Dept= ' || :OLD.dept|| ', ');
DBMS_OUTPUT.PUT('New Dept= ' || :NEW.dept );
END;
トリガーステートメント:
UPDATE employees
SET dept ='Accounts'
WHERE empno IN (101 ,105);
:newは、挿入しようとしている新しい値を意味します:oldは、データベース内の既存の値を意味します
:oldは古い値です:newは新しい値です、
たとえば、Creation_DateフィールドとModified_Byフィールドでトリガーで使用されます
:oldおよび:newは、行レベルトリガーを使用するときに行レベルデータにアクセスするために参照される擬似レコードです。
•:old-古い値を参照•:new-新しい値を参照
例えば:
CREATE OR REPLACE TRIGGER mytrig BEFORE
INSERT OR
UPDATE
ON mytab FOR EACH ROW
BEGIN
IF INSERTING THEN
SELECT trunc(sysdate), trunc(sysdate) INTO :new.created, :NEW.last_updated FROM DUAL;
END IF; --INSERTING
IF UPDATING THEN
SELECT trunc(sysdate) INTO :NEW.last_updated FROM DUAL;
END IF; --UPDATING
END;
これが古いものと新しいものの概念を説明することを願っています。
:newは新しい値です-トリガーが起動された後、これは列の値です:oldは古い値です-トリガーが起動された後、この値は:new valueに置き換えられます
フィールドの古い値を取得するためのトリガー内の更新操作と、最近の値を使用するための新しい操作と古い操作
簡単な方法で、
テーブルにデータを操作するとトリガーが起動します。そのため、トリガーが起動する間、両方の値があります。 1つは古いデータ値を参照し、もう1つは最近更新/削除/挿入した新しいデータ値を参照しています。の場合
挿入-古い値はnullになり、新しい値には何らかの値の更新が含まれます-古いものと新しい両方には値の削除があります-古い値はありますが、新しい値は含まれません。
したがって、:OLDおよび:NEWを使用すると、履歴を保持する他のテーブルを挿入/更新したり、他の依存テーブルを挿入/更新できる:OLDまたは:NEW値に基づいて更新したりできます。
これがお役に立てば幸いです。