7

誰かが次の意味を説明してもらえますか:

:newおよび:oldトリガーコードで。

4

4 に答える 4

34

:new特定の列の新しい値と:old古い値にアクセスできる疑似レコードです。テーブルがあれば

CREATE TABLE foo (
  foo_id NUMBER PRIMARY KEY,
  bar    VARCHAR2(10),
  baz    VARCHAR2(10)
);

行を挿入します

INSERT INTO foo( foo_id, bar, baz ) 
  VALUES( 1, 'Bar 1', 'Baz 1' );

その後、挿入トリガーの前に行レベルで

:new.foo_id will be 1
:new.bar will be 'Bar 1'
:new.baz will be 'Baz 1'

その間

:old.foo_id will be NULL
:old.bar will be NULL
:old.baz will be NULL

その後、その行を更新すると

UPDATE foo
   SET baz = 'Baz 2'
 WHERE foo_id = 1

その後、更新前の行レベルのトリガーで

:new.foo_id will be 1
:new.bar will be 'Bar 1'
:new.baz will be 'Baz 2'

その間

:old.foo_id will be 1
:old.bar will be 'Bar 1'
:old.baz will be 'Baz 1'

次に行を削除すると

DELETE FROM foo
 WHERE foo_id = 1

次に、削除前の行レベルのトリガーで、

:new.foo_id will be NULL
:new.bar will be NULL
:new.baz will be NULL

その間

:old.foo_id will be 1
:old.bar will be 'Bar 1'
:old.baz will be 'Baz 2'
于 2012-05-17T16:15:54.850 に答える
3

平易な英語で:

これらは、列がどのようであったか (古い)、どのようになるか (新しい) からの情報にアクセスできるようにするエイリアスです。

オラクルのドキュメントから:

古い値と新しい値は、BEFORE 行トリガーと AFTER 行トリガーの両方で使用できます。BEFORE 行トリガーでは新しい列値を割り当てることができますが、AFTER 行トリガーでは割り当てられません (AFTER 行トリガーが起動される前にトリガー文が有効になるため)。BEFORE 行トリガーが new.column の値を変更した場合、同じステートメントによって起動された AFTER 行トリガーは、BEFORE 行トリガーによって割り当てられた変更を認識します。

相関名は、WHEN 句のブール式でも使用できます。古い修飾子と新しい修飾子をトリガーの本体で使用する場合は、それらの前にコロンを付ける必要がありますが、WHEN 句または REFERENCING オプションで修飾子を使用する場合はコロンを使用できません。

于 2012-05-17T16:19:12.693 に答える
2

トリガーでは、:oldレコードにはトリガーステートメントの実行前の値が:new含まれ、レコードには実行後の値が含まれます。

于 2012-05-17T16:16:52.670 に答える
2

old値は値before the changeで、値newvalue to be changedです。たとえば、 ではupdate set col1=10、10 がnew値で、列の現在の値が古いものです。

挿入では、古い値はなく、新しい値のみがあり、削除では、新しい値はなく、古い値のみがあります

于 2012-05-17T16:20:50.233 に答える