在Oracle上提交后触发触发器

lymnna71  于 2022-11-03  发布在  Oracle
关注(0)|答案(1)|浏览(637)

我正在写一个sql触发器来更新表中的一些列。我必须写这个触发器只在提交后触发。我读过一些关于这个主题的文章,但是大多数文章都说它是使用过程的。但是我必须用触发器来做。

CREATE OR REPLACE TRIGGER tr_reset_er_encours
 AFTER INSERT OR UPDATE ON T
 FOR EACH ROW
 BEGIN
 IF (:NEW.T.var1)=0
 THEN UPDATE T 
  SET var1=NULL
 END IF;
 END;
gtlvzcf8

gtlvzcf81#

触发器在t表上触发after insert or update。你不能(至少,据我所知)* 指示 * 它在提交后触发。
除此之外,重写为

CREATE OR REPLACE TRIGGER tr_reset_er_encours
   BEFORE INSERT OR UPDATE
   ON t
   FOR EACH ROW
   WHEN (new.var1 = 0)
BEGIN
   :new.var1 := NULL;
END;

因为更新触发器触发的同一个表会导致 mutating table 错误。
您应该使用以下语句来说明您已阅读该程序:基本上,您应该在事务结束时提交。

  • (在程序中)做某事
  • 提交
  • 做别的事情
  • 永远不要再承诺(因为你会失去你在“其他事情”中所做的)

相关问题