oracle - 在行触发器中取消插入值
问题描述
我的数据库触发器有问题,我应该在其中取消插入/更新的值 ( 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;
/
预先感谢您的帮助。
注意:我是一个相对较新的成员,所以如果我的问题不符合正确的格式,我可能需要额外的建议/编辑。
解决方案
使用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;
/
推荐阅读
- linux - 分析在 Kubernetes Linux 中运行的 dotnet 核心进程的内存转储
- kubernetes - Kubernetes Pod 自动伸缩
- solr - Solr fl(字段列表),字段名称中有空格
- javascript - `bind` 不适用于 ReactJS 中的导入函数
- java - 在 Java 8 中使用方法引用时出现编译错误
- android - 如何在@Entity 的 primaryKeys 列表中设置 autoGenerate?
- git - gitlab-ci 中的增量更新
- java - 如何在 CSV 中添加由 Java 中的数据组成的列
- r - R save() 不产生任何输出但没有错误
- php - Laravel 迁移:无法添加外键约束