【发布时间】:2021-04-21 02:34:50
【问题描述】:
在 Db2 版本 10.x 中,我在表 TEST 上创建了一个插入前触发器
CREATE OR REPLACE TRIGGER TRG_TEST_INSERT
BEFORE INSERT ON TEST
REFERENCING NEW AS OBJ
FOR EACH ROW MODE DB2SQL
WHEN (((SELECT CheckCount('SELECT count(1) FROM TEST') FROM SYSIBM.SYSDUMMY1)));
还有这个功能:
--FUNCTION
CREATE OR REPLACE FUNCTION CheckCount(query varchar(1000))
RETURNS INTEGER
LANGUAGE SQL
dfl:BEGIN
DECLARE id INTEGER;
DECLARE cur CURSOR for st1;
PREPARE st1 FROM query;
open cur;
fetch from cur into id;
return id;
close cur;
END dfl*/
我正在调用 udf 来检查同一张桌子上的计数。但是我遇到了错误 SQLCODE=-746, SQLSTATE=57053
SQL0746N 名为“”的例程(特定名称 "") 失败,因为例程违反了嵌套 SQL 尝试执行操作“”时的语句规则 在名为“”的桌子上。
解释:
当应用程序调用一个例程时返回此消息 尝试以与其他用途冲突的方式访问表 由应用程序或直接调用的例程或 间接来自该应用程序。
因为我的前触发器在同一张桌子上。如何在不遇到此类错误的情况下检查计数?
【问题讨论】:
-
您的问题是什么?您描述了您所做的以及(预期的)错误。
-
我的问题是如何克服这个错误。或使用此 UDF 检查计数的实现
-
我添加了那个问题。
-
您是否尝试将其内联到触发器本身?
-
是的内联工作。但我还有一些其他功能要执行,只能使用函数来完成
标签: triggers db2 user-defined-functions