DB2更新后触发器,更新单个;e列n在同一表中的更新行

问题描述 投票:0回答:1

在云端使用 DB2 ( LUW ) 我想更新一行中的单个列值,在更新该行中的任何其他值之后。

以下插入后的作品

CREATE TRIGGER CENTRAL_REPOSITORY.TR_DATABASE_OBJECT_INS_CDT
 AFTER INSERT ON CENTRAL_REPOSITORY.DATABASE_OBJECT
 REFERENCING NEW AS N_ROW
 FOR EACH ROW
 UPDATE CENTRAL_REPOSITORY.DATABASE_OBJECT SET create_datetime = current_timestamp
    where id = N_ROW.id

以下更新后不

CREATE TRIGGER CENTRAL_REPOSITORY.TR_DATABASE_OBJECT_UPD_UDT
 AFTER UPDATE ON CENTRAL_REPOSITORY.DATABASE_OBJECT
 REFERENCING NEW AS N_ROW
 FOR EACH ROW
 UPDATE CENTRAL_REPOSITORY.DATABASE_OBJECT SET update_datetime = current_timestamp
    where id = N_ROW.id;
 

尝试在表上运行插入后我得到的错误是

“触发器“CENTRAL_REPOSITO”中触发的 SQL 语句发生错误。错误返回的信息包括 SQLCODE“-724”、SQLSTATE“54038”和消息标记“CENTRAL_REPOSITORY.TR_DATABASE_OBJECT_UPD_”。SQLCODE=-723,SQLSTATE=09000 , 司机=4.32.28"

db2 db2-luw
1个回答
0
投票

当 Db2 发现如果您的触发器触发时可能会激活多个对象,您会收到此错误 (SQLCODE = -724) 也称为“SQL0724N”,这通常是因为您在表上有其他触发器或 RI,其条件不互斥或可能会导致递归。

看看docs

包括以下建议:

说明

间接 SQL 的级联发生在触发器激活另一个时 触发器(可能通过引用约束删除规则)或 包含 SQL 的例程调用另一个例程。这件事的深度 触发器的级联限制为 16 个,例程的级联限制为 64 个。

请注意,触发器包括触发的递归情况 直接或间接导致同一个触发器执行的 SQL 语句 被激活,或者例程直接或间接调用 本身就是一种级联形式,极有可能导致这个错误 如果没有条件防止级联超过 极限

对象类型是 TRIGGER、FUNCTION、METHOD 或 PROCEDURE 之一。

指定的对象名称是本来应该是的对象之一 级联第十七层激活

用户反应

从语句激活或调用的对象开始 收到此错误。如果这些对象中的任何一个是递归的, 确保有一些条件可以防止对象 被激活或调用超过限制允许。如果这不是 问题的原因,遵循对象链 activated or invoked 确定超出级联的链 极限

© www.soinside.com 2019 - 2024. All rights reserved.