需要创建一个触发器

时间:2017-02-01 07:53:17

标签: sql oracle plsql triggers

select id, status, name , status_change_dt from account;

每当状态更改为任何其他状态时,status_change_dt应更新为sysdate

create or replace
  TRIGGER ADD_DT 
  after UPDATE of status ON account 
  for each row
  BEGIN 
  :new.status_change_dt := sysdate ;
  END;

创建此触发器时遇到错误。先感谢您。

1 个答案:

答案 0 :(得分:4)

更新后无法更改新值。

甚至错误也非常清楚:

  

ORA-04084:无法更改此触发类型的新值

使用BEFORE代替AFTER

试试这个:

create or replace
  TRIGGER ADD_DT 
  before UPDATE of status ON account 
  for each row
  BEGIN 
  :new.status_change_dt := sysdate ;
  END;

编辑:

如果你有另一张桌子

account_dtl (ref_id references account(id), status_2);

并且帐户表还有一列用于跟踪status_2更改,请使用以下命令:

create or replace
  TRIGGER ADD_DT_Status_2 
  before UPDATE of status_2 ON account_dtl
  for each row
  BEGIN 
    update account
    set status2_change_dt := sysdate
    where id = :new.ref_id;
  END;

虽然在自己的表中跟踪status_2更改会更有意义,例如account_dtl