在行触发器中取消插入值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在行触发器中取消插入值相关的知识,希望对你有一定的参考价值。

我的数据库触发器有一个问题,我应该取消插入/更新的值(RESULTATOBT),虽然我需要OLD / NEW变量,所以我不能应用this solution (updating the table in the table trigger)

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

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

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;
/

预先感谢您的帮助。

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

答案

使用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;
/

以上是关于在行触发器中取消插入值的主要内容,如果未能解决你的问题,请参考以下文章

Ansible:在行尾插入字符串,但前提是字符串不存在或/与更改值(如果存在)

更改片段后如何取消显示堆叠的吐司?

SQL 在行中的第一个空列中插入 MySQL 错误

PL/SQL 触发器插入下一个值

在行值更改后,在另一列中返回一行

DB2 在行插入时创建一个随机但唯一的字符标识符