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,但前面不用加冒號:
參考:
沒有留言:
張貼留言