網頁

2017/9/22

Oracle Trigger REFERENCING

Oralce的Trigger(觸發程式)中的REFERENCING可修改預設用來存取row資料的NEWOLD的名稱。

只有row trigger才能透過correlation names(類似table的別名)存取異動的row資料,預設的correlation namesOLDNEWPARRENT

如果要修改預設的correlation names,用REFERENCING來修改,並使用下面的語法來存取異動row的欄位值

:pseudorecord_name.field_name

例如下面範例將預設的correlation names的NEW改為new_nameOLD改為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,但前面不用加冒號:


參考:

沒有留言:

張貼留言