Oralce的Trigger(觸發程式)中的REFERENCING
可修改預設用來存取row資料的NEW
和OLD
的名稱。
只有row trigger才能透過correlation names(類似table的別名)存取異動的row資料,預設的correlation names為OLD
,NEW
及PARRENT
。
如果要修改預設的correlation names,用REFERENCING
來修改,並使用下面的語法來存取異動row的欄位值
:pseudorecord_name.field_name
例如下面範例將預設的correlation names的NEW
改為new_name
,OLD
改為old_name
,並在Trigger程式中使用:old_name.col_1
存取欄位的舊值,使用:new_name.col_1
存取欄位的新值。
CREATE OR REPALCE TRIGGER "db_name".trigger_name
BEFORE INSERT OR UPDATE
ON table_name REFERENCING NEW AS new_name OLD AS old_name
FOR EACH ROW
BEGIN
-- 觸發後要執行的程式...
:old_name.col_1 = ...
:new_name.col_1 = ...
END;
所謂row trigger是指建立Trigger時有加上FOR EACH ROW
,否則為statement trigger。
此外在Trigger程式中的WHEN
條件式可使用correlation names,但前面不用加冒號:
參考:
沒有留言:
張貼留言