gpt4 book ai didi

mysql - 如何在 MySQL 的单个存储过程中使用多个游标

转载 作者:可可西里 更新时间:2023-11-01 07:23:16 25 4
gpt4 key购买 nike

我想创建一个能够执行多任务的存储过程。然后它得到下面的错误信息

错误代码:1338 处理程序声明后的游标声明

请看我的店铺程序

CREATE PROCEDURE `spTest`(OUT v1 VARCHAR(500), OUT v2 VARCHAR(500))
BEGIN

DECLARE _cur_1 CURSOR FOR
SELECT id
FROM tbl_1;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET _cur1Done = 1;

DECLARE _cur_2 CURSOR FOR
SELECT id
FROM tbl_2;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET _cur2Done = 1;

.......

最佳答案

您可能只有一个 continue handler 在一个 block 中处于事件状态。多个 continue handler 会出现 Duplicate handler declared in same block 问题,即使您的声明顺序正确(首先是所有游标,然后是处理程序)。

您可以通过创建一个专门用于游标访问的 block 来解决这个问题。您可以将这些代码块放在同一个父 block 中,或放在嵌套循环中,或任何地方。

DELIMITER $$
CREATE PROCEDURE `spTest`(OUT v1 VARCHAR(500), OUT v2 VARCHAR(500))
BEGIN

declare tbl_1_id int;
declare tbl_2_id int;

declare _cur1Done boolean default false;
declare _cur2Done boolean default false;

DECLARE _cur_1 CURSOR FOR SELECT id FROM tbl_1;
DECLARE _cur_2 CURSOR FOR SELECT id FROM tbl_2;

begin -- dedicated block to fetch from cursor 1 and update its flag
declare continue handler for not found set _cur1Done = TRUE;
fetch _cur_1 into tbl_1_id;
end;

begin -- dedicated block to fetch from cursor 2 and update its flag
declare continue handler for not found set _cur2Done = TRUE;
fetch _cur_2 into tbl_2_id;
end;
END $$
DELIMITER ;

关于mysql - 如何在 MySQL 的单个存储过程中使用多个游标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11338006/

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