web-dev-qa-db-ja.com

PLSQL:NEWおよび:OLD

:NEWおよび:OLD PLSQLブロックでは、その使用法を理解するのが非常に難しいと感じています。

26
Pravin

通常、 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には新しい値が含まれます。

31
GrahamA

:Newおよび:Old Valueは、DMLステートメントで区別できます。
挿入-:Old = NULL :New=新しい値を挿入

pdate-:Old = Updateステートメントがトリガーされる前にテーブルに存在する値:New = Updateに新しい値を指定

削除-:古い =削除前の値:新規 = NULL

18
Gok

:oldおよび:newは、行レベルトリガーを使用するときに行レベルデータにアクセスするために参照される擬似レコードです。

  • :old-古い値を参照
  • :new-新しい値を参照

以下の操作の場合、それぞれの古い値と新しい値:

  1. [〜#〜] insert [〜#〜]-:old.value = NULL、:new value =挿入後の値
  2. [〜#〜] delete [〜#〜]-:old.value =削除前の値、:新しい値= null
  3. [〜#〜] update [〜#〜]-:old.value =更新前の値、:new value =更新後の値

例えば:

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);
7
Uday Gupta

:newは、挿入しようとしている新しい値を意味します:oldは、データベース内の既存の値を意味します

5
Arun nath

:oldは古い値です:newは新しい値です、

たとえば、Creation_DateフィールドとModified_Byフィールドでトリガーで使用されます

2
Jelman

: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;

これが古いものと新しいものの概念を説明することを願っています。

2
Arjun

:newは新しい値です-トリガーが起動された後、これは列の値です:oldは古い値です-トリガーが起動された後、この値は:new valueに置き換えられます

1
praveen muppala

フィールドの古い値を取得するためのトリガー内の更新操作と、最近の値を使用するための新しい操作と古い操作

1
sudhirkondle

簡単な方法で、

テーブルにデータを操作するとトリガーが起動します。そのため、トリガーが起動する間、両方の値があります。 1つは古いデータ値を参照し、もう1つは最近更新/削除/挿入した新しいデータ値を参照しています。の場合

挿入-古い値はnullになり、新しい値には何らかの値の更新が含まれます-古いものと新しい両方には値の削除があります-古い値はありますが、新しい値は含まれません。

したがって、:OLDおよび:NEWを使用すると、履歴を保持する他のテーブルを挿入/更新したり、他の依存テーブルを挿入/更新できる:OLDまたは:NEW値に基づいて更新したりできます。

これがお役に立てば幸いです。

1