2012-05-17 3 views
5

может кто-то пожалуйста, объясните, что значит:новый и старый код триггера

:new и :old в спусковой коде.

+0

ли это домашнее задание? – Sparky

+0

дайте нам некоторый контекст – keyser

+0

Это вопрос пересмотра, который я готов, вы должны ответить на вопрос «что подразумевается под: новым и: старым в триггерном коде?» – user1300580

ответ

24

: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' 
2

В триггере :old записи содержит значение перед выполнением инструкции триггера, то :new записи содержит значение после выполнения.

3

В простом английском языке:

Они являются псевдонимами, которые позволяют получить доступ к информации от того, как колонна была (старой), и как это будет (новое).

From Oracle documentation:

Старые и новые значения доступны в обоих ДО и ПОСЛЕ ряд триггеров. Новое значение столбца может быть назначено в триггере BEFORE, но не в триггере строки AFTER (потому что оператор триггера вступает в силу до запуска триггера строки AFTER). Если триггер BEFORE изменяет значение new.column, то триггер строки AFTER, запускаемый одним и тем же оператором, видит изменение, назначенное триггером BEFORE.

Корреляционные имена также могут использоваться в булевом выражении предложения WHEN. Двоеточие должно предшествовать старым и новым квалификаторам, когда они используются в теле триггера, но двоеточие не допускается при использовании квалификаторов в предложении WHEN или опции REFERENCING.

2

значение old это значение before the change и значение new является value to be changed, так, например, на update set col1=10, 10 это значение new и значение, которое является текущим в колонке старый дальше.

На вставке, там не старое значение, только новое и на удалении не существует новое значение, только старый

Смежные вопросы