gpt4 book ai didi

MySQL存储过程更新帐户状态错误代码: 1329

转载 作者:行者123 更新时间:2023-11-30 01:34:24 25 4
gpt4 key购买 nike

我遇到一种情况,我想迭代“schedPayments”表,该表存储与“client”表中的客户相对应的付款计划。客户端表还包含一个“状态”列,其中 0 表示“逾期”,1 表示“当前”。当 client 表中的余额大于 schedPayments 表中的假定余额并且今天的日期晚于计划付款的日期时,clients 表中的状态列应设置为 0。

我的解决方案可能完全无法理解,但我不断收到错误代码:1329。无数据 - 提取、选择或处理零行。 MySQL Workbench 缺乏一些我希望它拥有的主要调试功能。该文档也没有完全涵盖我在这种情况下所需要的内容。

CREATE PROCEDURE `project`.`status_update` ()
BEGIN
DECLARE balance DECIMAL(20) DEFAULT 0;
DECLARE cID INT(10) DEFAULT 0;
DECLARE currentID INT(10) DEFAULT 0;
DECLARE supposedBal DECIMAL(20) DEFAULT 0;
DECLARE payDate DATE;
DECLARE cur1 CURSOR FOR SELECT ClientID,SupposedBalance,Date FROM project.schedpayments;

OPEN cur1;

status_loop: LOOP
FETCH cur1 INTO cID, supposedBal, payDate;
BLOCK2: BEGIN
DECLARE cur2 CURSOR FOR SELECT balance FROM project.client WHERE ID=cID;
OPEN cur2;
FETCH cur2 INTO balance;
IF currentID > cID THEN
SET currentID = cID;
IF (CURDATE() > payDate) AND (supposedBal < balance) THEN
UPDATE feeagree SET Status=0 WHERE ID=cID;
END IF;
CLOSE Cur2;

END IF;
END BLOCK2;

END LOOP;
CLOSE cur1;
END $$

您可以看到我如何将整个过程封装在一个 block 中,这只会导致编译器认为第一个 block 以 END BLOCK2 结束;这导致错误代码 1325。光标已打开。

我肯定会让这变得比必要的更加复杂,所以任何帮助将不胜感激。我学习这些东西的唯一方法就是试炼,而且今天 super 热。

最佳答案

看来您不需要所有这些游标,并且可以通过一个 UPDATE 语句来实现您的目标。

如果不查看表结构和示例数据,很难做到精确,但更简洁的 SP 版本可能如下所示

CREATE PROCEDURE status_update()
UPDATE feeagree
SET Status = 0
WHERE ID IN
(
SELECT p.cID
FROM schedpayments p JOIN client c
ON p.cID = p.ID
WHERE p.Date < CURDATE()
AND p.SupposedBalance < c.balance
GROUP BY p.cID
);

关于MySQL存储过程更新帐户状态错误代码: 1329,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17095817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com