【问题标题】:IBM DB2 error sql code-724 & sql state 54038IBM DB2 错误 sql 代码 724 & sql 状态 54038
【发布时间】:2020-01-22 20:43:18
【问题描述】:

我试图向表中插入一些示例数据,但 db2 命令行处理器返回此消息“DB21034E 该命令被作为 SQL 语句处理,因为它不是 有效的命令行处理器命令。在 SQL 处理期间,它返回: SQL0723N 触发器中的触发 SQL 语句发生错误 “埃德温.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 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))

【问题讨论】:

  • 包含实际的错误消息而不是只包含错误代码会很有用。
  • 至于你的程序逻辑。您应该注意以下事项。使用没有fetch 的游标是没有用的:你不能只使用打开/关闭语句的结果。您使用delete from cart_details where cart_details_id=cart_details_id 语句删除表中的所有行,因为如果您的列名和参数名相同,那么这样的名称将被视为列名。

标签: db2 db2-express-c


【解决方案1】:

SQL0724N消息的描述明确指出:

SQL0724N
object-type 类型的 object-name 的激活将 超过间接 SQL 级联的最大级别。

说明
当触发器激活另一个触发器时,会发生间接 SQL 级联 触发器(可能通过引用约束删除规则)或 包含 SQL 的例程调用另一个例程。这个深度 级联限制为 16 个触发器和 64 个例程。注意 触发器包含触发 SQL 的递归情况 直接或间接导致相同触发器的语句 已激活,或例程直接或间接调用自身, 是一种级联形式,如果 没有条件阻止级联超过限制。 对象类型是 TRIGGER、FUNCTION、METHOD 或 PROCEDURE 之一。这 指定的对象名是本应被 在第十七层级联激活。

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

您在after insert 触发器中调用例程将行插入到表中。这导致此触发器的递归调用超出了允许的级联调用数。

【讨论】:

  • 我找到了解决方法,只需从程序中删除总和并更改它以使其正常工作
猜你喜欢
  • 2022-07-17
  • 2020-03-02
  • 2013-02-13
  • 1970-01-01
  • 1970-01-01
  • 2018-04-14
  • 1970-01-01
  • 2015-06-05
  • 2013-05-30
相关资源
最近更新 更多