mysql - 过程中的 MySQL 多个游标
问题描述
在尝试了解 MySQL 中的过程和游标如何工作时,我的代码一直存在问题。我想让游标使用和/或更新代码中声明的变量,但正确更新的唯一变量是 var1 和 var2。
Cursor2 应该只返回 1 个结果,但它只返回空行,var3 和 var4 没有更新——它们的值显然仍然是默认值。
Cursor3 和变量 var4 相同。
真实的代码是这样的:
DELIMITER //
CREATE PROCEDURE nameProcedure()
proc_label:BEGIN
DECLARE finished INTEGER DEFAULT 0;
DECLARE var1 VARCHAR(20) DEFAULT "";
DECLARE var2 VARCHAR(30) DEFAULT "";
DECLARE var3 INT(3) DEFAULT 0;
DECLARE var4 int(3) DEFAULT 0;
// first cursor, gives multiple rows as results
DECLARE cursor1 CURSOR FOR
SELECT column1, column2
FROM table1;
// second cursor, should give only 1 row as result
DECLARE cursor2 CURSOR FOR
SELECT column1, column2
FROM table2
WHERE column1=var1
AND column2=var2;
// third cursor, should give only 1 row as result
DECLARE cursor3 CURSOR FOR
SELECT count(column3)
FROM table3
WHERE column1=var3;
// HANDLER
DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1;
OPEN cursor1;
OPEN cursor2;
OPEN cursor3;
label: LOOP
FETCH cursor1 INTO var1, var2;
IF finished=1 THEN LEAVE loop;
END IF;
FETCH cursor2 INTO var3, var4;
IF finished=1 THEN LEAVE proc_label;
END IF;
FETCH cursor3 INTO var5;
IF finished=1 THEN LEAVE proc_label;
END IF;
/* UPDATE some rows in tables using the values from var1, var2, var3, var4, var5 in WHERE clauses */
END LOOP loop;
CLOSE cursor1;
CLOSE cursor2;
CLOSE cursor3;
END//
我为这篇文章中的文字道歉,英语不是我的母语,而且我从未在论坛上写过帖子,所以我不确定如何格式化它,以便让人们更容易理解这个问题。建议,更正等非常受欢迎。
解决方案
推荐阅读
- mule - 如何在 dataweave 中使用 Excel 作为查找
- laravel - 我如何才能像 Laravel 中的 dd() 函数一样将变量数据作为字符串获取?
- authentication - Keycloak 是否支持某种形式的中间人身份验证?
- java - CloudSDK 能否帮助使用仅在运行时才知道的 OData 实体类型?
- javascript - ChartJS 根据日期更改显示的数据?
- visual-studio - 如何使用新项目格式将文件夹的文件标记为带有通配符的嵌入式资源?
- ios - 如何让 AKSequencer 切换声音字体?
- html - 为什么我的 CSS 规则没有按预期应用?
- java - 在 or-tools 中为 MIP 编写线性表达式
- c# - Unity - 如何掩盖精灵网格内的精灵?