列更新时的Oracle SQL触发器

时间:2011-11-02 14:32:46

标签: sql oracle

我正在尝试为我的表创建一个触发器,根据某个标志设置为'Y'的时间自动添加一个发布日期

我没有太多创建触发器的经验,但到目前为止,这就是我所拥有的

  create or replace
  TRIGGER ADD_CREATE_DT 
  after UPDATE of approved ON articles 
  for each row
  BEGIN
  :new.create_dt := sysdate where approved = 'Y';
  END;

更新列

时出现此错误
  

触发'USER.ADD_CREATE_DT'无效且重新验证失败

有什么想法吗?

由于

4 个答案:

答案 0 :(得分:24)

使用WHEN子句:

create or replace
  TRIGGER ADD_CREATE_DT 
  after UPDATE of approved ON articles 
  for each row
  when (new.approved = 'Y')
  BEGIN
  :new.create_dt := sysdate;
  END;

或使用IF:

create or replace
  TRIGGER ADD_CREATE_DT 
  after UPDATE of approved ON articles 
  for each row
  BEGIN
  if :new.approved = 'Y' then
   :new.create_dt := sysdate;
  end if;
  END;

在这种情况下,WHEN更合适,更有效率。

答案 1 :(得分:3)

create or replace
  TRIGGER ADD_CREATE_DT 
  after UPDATE of approved ON articles 
  for each row
  BEGIN
    IF :NEW.approved = 'Y' THEN
      :new.create_dt := sysdate;
    END IF;
  END;

答案 2 :(得分:1)

我不知道您使用什么版本的Oracle? 在Oracle 10g中,出现以下错误:

ORA-04084: cannot change NEW values for this trigger type
04084. 00000 -  "cannot change NEW values for this trigger type"
*Cause:    New trigger variables can only be changed in before row
           insert or update triggers.
*Action:   Change the trigger type or remove the variable reference.

不允许在AFTER触发器上更改该字段。

答案 3 :(得分:-1)

温选择。 使用之前代替之后