首页 > 解决方案 > 在行触发器中取消插入值

问题描述

我的数据库触发器有问题,我应该在其中取消插入/更新的值 ( RESULTATOBT),尽管我需要 OLD/NEW 变量,所以我无法应用此解决方案(更新表触发器中的表) .

错误是一个变异表;由于为每一行触发器修改了一个表。

这是我的代码的相关摘录:

CREATE OR REPLACE TRIGGER VERIF_RESULTATS
  AFTER INSERT OR UPDATE OF RESULTATOBT
  ON PARTICIPATION
  FOR EACH ROW
  FOLLOWS VERIF_PARTICIPATION
  WHEN ( NEW.RESULTATOBT IS NOT NULL )
BEGIN 
  UPDATE PARTICIPATION p
  SET RESULTATOBT = NULL
  WHERE p.CDPERS = :NEW.CDPERS
    AND p.CDCOMPET = :NEW.CDCOMPET;
END;
/

预先感谢您的帮助。

注意:我是一个相对较新的成员,所以如果我的问题不符合正确的格式,我可能需要额外的建议/编辑。

标签: oracleplsqldatabase-trigger

解决方案


使用before触发器并简单地分配 NULL:

CREATE OR REPLACE TRIGGER VERIF_RESULTATS
  BEFORE INSERT OR UPDATE OF RESULTATOBT
  ON PARTICIPATION
  FOR EACH ROW
  WHEN ( NEW.RESULTATOBT IS NOT NULL )
BEGIN 
  :new.RESULTATOBT := NULL;
END;
/

推荐阅读