IBM DB2错误sql代码-724&;sql状态54038

IBM DB2错误sql代码-724&;sql状态54038,db2,db2-express-c,Db2,Db2 Express C,我试图向表中插入一些示例数据,但db2命令行处理器返回消息“DB21034E”。该命令作为SQL语句处理,因为它不是 有效的命令行处理器命令。在SQL处理过程中,它返回: SQL0723N触发器中触发的SQL语句出错 “EDWIN.CALLCQ”。返回的错误信息包括SQLCODE“-724”, SQLSTATE“54038”和消息令牌“EDWIN.CHKQUANTITY | PROCEDURE”。 SQLSTATE=09000“ 这是我的程序 create procedure chkQuanti

我试图向表中插入一些示例数据,但db2命令行处理器返回消息“DB21034E”。该命令作为SQL语句处理,因为它不是 有效的命令行处理器命令。在SQL处理过程中,它返回: SQL0723N触发器中触发的SQL语句出错 “EDWIN.CALLCQ”。返回的错误信息包括
SQLCODE“-724”
SQLSTATE“54038”
和消息令牌“EDWIN.CHKQUANTITY | PROCEDURE”。 SQLSTATE=09000“

这是我的程序

create procedure chkQuantity (Cart_ID int,Food_ID int, Food_Quantity int)begin declare c cursor with return for select sum(Food_Quantity) from Cart_details group by Cart_ID;open c; If(Food_Quantity <= 10)then insert into cart_details(Cart_ID,Food_ID,Food_Quantity) values (Cart_ID , Food_ID ,Food_Quantity);Else signal sqlstate'45000' set message_text = '1 Cart Maximum order only 10 food Quantity' ;delete from cart_details where cart_details_id=cart_details_id; end if;close c; end
桌子

create table Cart\u Details(Cart\u Details\u ID int not null主键、Cart\u ID int、外键(Cart\u ID)引用Cart、Food\u ID int、外键(Food\u ID)引用Food、Food\u数量int check(Food\u quantity消息的描述清楚地说明:

SQL0724N
将激活类型为object type的对象名称 超过间接SQL级联的最大级别

解释
当触发器激活另一个触发器时,会发生间接SQL的级联 触发器(可能通过引用约束删除规则)或 包含SQL的例程调用另一个例程 触发器的级联限制为16,例程的级联限制为64 一个触发器包含一个触发的SQL语句的递归情况 直接或间接导致相同触发器被激活的语句 激活,或者例程直接或间接调用自身, 是一种级联形式,如果 没有条件防止级联超过限制。 对象类型是触发器、函数、方法或过程之一 指定的对象名是本应 在级联的第十七级激活

用户响应
从以下语句激活或调用的对象开始: 收到此错误。如果其中任何对象是递归的,请确保 存在某种条件阻止对象 激活或调用的数量超过了允许的限制。如果这不是 导致问题的原因,请遵循激活的对象链 或调用以确定超出级联限制的链


在insert
触发器之后调用一个例程,在表中插入一行。这会导致此触发器的递归调用超过允许的级联调用数。

包含实际的错误消息,而不仅仅是它包含的错误代码会很有用。至于您的过程逻辑,您应该知道e如下。不使用
fetch
的游标是无用的:您不能将其结果仅用于open/close语句。您可以使用
delete from cart\u details其中cart\u details\u id=cart\u details\u id
语句删除表中的所有行,因为如果您的列和参数名相等,则该名称将被视为列我找到了一个修复方法,只需从过程中删除总和,并将其更改为计数即可
create trigger callCQ after insert on cart_details referencing new as N for each row mode db2sql call chkQuantity(N.Cart_ID, N.Food_ID, N.Food_Quantity)
create table Cart_Details(Cart_Details_ID int not null primary key ,Cart_ID int , Foreign Key(Cart_ID) references Cart,Food_ID int,foreign key(Food_ID) references Food, Food_quantity int check(food_quantity <= 10))