创建触发器以在更改特定值之前更新表中的日期

时间:2013-10-15 18:50:41

标签: sql oracle triggers

我尝试创建一个更新表的触发器,以便在将某些内容插入表时,给定的结束日期将更改为设置为新条目的开始日期之前的那一天。我创建了这个符合的触发器但是在检查它时不起作用。有谁能看到它的问题?

CREATE TRIGGER
    updatetrigger12345
BEFORE INSERT ON
    shares_amount
FOR EACH ROW
  BEGIN
        UPDATE OF
          shares_amount
        SET
          date_end = :NEW.date_start-1
        WHERE
          share_issue_id = :NEW.share_issue_id
          AND
          share_id= :NEW.share_id
          ;
END
;
/

1 个答案:

答案 0 :(得分:0)

坏,坏,坏。您不希望尝试更新正在执行其触发器的表。您只需要更新感兴趣的“:new”字段即可。也许是这样的:

CREATE TRIGGER
    updatetrigger12345
BEFORE INSERT ON
    shares_amount
FOR EACH ROW
  BEGIN

  :NEW.date_end := :NEW.date_start-1;
END
;
/

这是tutorial。另外,如果不需要,我会尽量远离使用触发器。肯定存在有意义的情况;然而,它们可能会被滥用,并导致许多混乱和问题。请阅读这篇经典的AskTom文章The Trouble With Triggers