2012-05-17 3 views
5

kann jemand bitte erklären, was gemeint ist mit:neuer und alter Trigger-Code

:new und :old in Trigger-Code.

+0

Ist das Hausaufgaben? – Sparky

+0

geben Sie uns einige Kontext – keyser

+0

es ist eine Revision Frage, die ich vorbereite, müssen Sie die Frage beantworten "was ist gemeint: neu und: alt in Trigger-Code?" – user1300580

Antwort

24

:new und :old sind Pseudodatensätze, mit denen Sie auf die neuen und alten Werte bestimmter Spalten zugreifen können. Wenn ich eine Tabelle

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

und ich legen Sie eine Reihe

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

dann in einem Zeilenebene vor Insert-Trigger

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

während

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

Wenn Sie Aktualisieren Sie dann diese Zeile

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

dann in einer vor einem Update Trigger auf Zeilenebene

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

während

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

Wenn ich löschen Sie die Zeile

DELETE FROM foo 
WHERE foo_id = 1 

dann in einem vor Zeile löschen -Level-Trigger,

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

während

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

In einem Abzug der :old Datensatz die Werte vor der auslösenden Anweisung der Ausführung enthält, enthält die :new Datensatz die Werte nach der Ausführung.

3

In Plain English:

Sie sind Aliase, die es Ihnen ermöglichen, den Zugriff auf Informationen aus, wie eine Säule war (alt) und wie sie (neu) sein wird.

From Oracle documentation:

Alte und neue Werte in den beiden zuvor zur Verfügung und nach Reihe auslöst. Ein neuer Spaltenwert kann in einem BEFORE-Zeilentrigger, aber nicht in einem AFTER-Zeilentrigger zugewiesen werden (weil die Triggeranweisung wirksam wird, bevor ein AFTER-Zeilentrigger ausgelöst wird). Wenn ein BEFORE-Zeilentrigger den Wert von new.column ändert, sieht ein AFTER-Zeilentrigger, der von derselben Anweisung ausgelöst wird, die vom BEFORE-Zeilentrigger zugewiesene Änderung.

Korrelationsnamen können auch im booleschen Ausdruck einer WHEN-Klausel verwendet werden. Ein Doppelpunkt muss den alten und neuen Qualifikationsmerkmalen vorangehen, wenn sie im Body eines Triggers verwendet werden, aber ein Doppelpunkt ist nicht zulässig, wenn die Qualifikationsmerkmale in der WHEN-Klausel oder der REFERENCING-Option verwendet werden.

2

der old Wert ist der Wert before the change und der new Wert ist die value to be changed, so beispielsweise auf einem update set col1=10, 10 ist der new Wert und der Wert, den Strom in der Spalte ist, ist die alt auf.

Auf einem Einsatz, da alte Wert ist nicht nur neu und auf einem Lösch es keine neuen Wert, nur alte