千家信息网

MySQL游标多循环一次的问题怎么解决

发表于:2025-11-14 作者:千家信息网编辑
千家信息网最后更新 2025年11月14日,这篇文章主要讲解了"MySQL游标多循环一次的问题怎么解决",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"MySQL游标多循环一次的问题怎么解决"吧!在
千家信息网最后更新 2025年11月14日MySQL游标多循环一次的问题怎么解决

这篇文章主要讲解了"MySQL游标多循环一次的问题怎么解决",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"MySQL游标多循环一次的问题怎么解决"吧!

在MySQL中使用游标的时候,发现游标多循环一次
想在表中插入一条语句,但是实际上却插入了两条
语句如下:
mysql> create table test(id int(5));
Query OK, 0 rows affected (0.13 sec)

mysql> delimiter $$
mysql> create procedure proc_drop_table()
-> BEGIN
-> /* Declare Variables */
-> DECLARE done_1 INT DEFAULT FALSE;
-> DECLARE v_history_table_name varchar(64);
-> declare the_query VARCHAR(500);
->
-> /* Declare Conditions */
-> DECLARE not_found CONDITION FOR 1741;
->
-> /* Declare Cursors */
-> DECLARE cur1 CURSOR FOR select CONCAT(TABLE_SCHEMA,'.',TABLE_NAME) from information_schema.tables where TABLE_SCHEMA='test' and TABLE_NAME like '%test%';
->
-> /* Declare Exception Handlers, usually with set actions */
-> /* usually with set actions, the following handler has two forms,
/*> one with begin .. end statements, and the other without */
-> DECLARE CONTINUE HANDLER FOR NOT FOUND SET done_1 = TRUE;
->
-> OPEN cur1;
-> read_loop_1: LOOP
-> FETCH cur1 INTO v_history_table_name;
-> /*IF done_1 IS FALSE THEN*/
-> set @v_history_table_name=v_history_table_name;
-> select concat('insert into ', @v_history_table_name, ' values (10)') into the_query;
-> SET @stmt=the_query;
-> PREPARE STMT FROM @stmt;
-> EXECUTE STMT;
-> DEALLOCATE PREPARE STMT;
-> /*END IF;*/
-> IF done_1 THEN
-> LEAVE read_loop_1;
-> END IF;
-> END LOOP read_loop_1;
-> CLOSE cur1;
-> end$$
Query OK, 0 rows affected (0.01 sec)

mysql> delimiter ;
mysql> select * from test;
Empty set (0.00 sec)

mysql> call proc_drop_table();
Query OK, 0 rows affected (0.01 sec)

mysql> select * from test;
+------+
| id |
+------+
| 10 |
| 10 |
+------+
2 rows in set (0.00 sec)

解决方法:
在实际执行的语句两边增加IF判断

mysql> truncate table test;
Query OK, 0 rows affected (0.07 sec)

mysql> drop procedure proc_drop_table;
Query OK, 0 rows affected (0.09 sec)

mysql> delimiter $$
mysql> create procedure proc_drop_table()
-> BEGIN
-> /* Declare Variables */
-> DECLARE done_1 INT DEFAULT FALSE;
-> DECLARE v_history_table_name varchar(64);
-> declare the_query VARCHAR(500);
->
-> /* Declare Conditions */
-> DECLARE not_found CONDITION FOR 1741;
->
-> /* Declare Cursors */
-> DECLARE cur1 CURSOR FOR select CONCAT(TABLE_SCHEMA,'.',TABLE_NAME) from information_schema.tables where TABLE_SCHEMA='test' and TABLE_NAME like '%test%';
->
-> /* Declare Exception Handlers, usually with set actions */
-> /* usually with set actions, the following handler has two forms,
/*> one with begin .. end statements, and the other without */
-> DECLARE CONTINUE HANDLER FOR NOT FOUND SET done_1 = TRUE;
->
-> OPEN cur1;
-> read_loop_1: LOOP
-> FETCH cur1 INTO v_history_table_name;
-> IF done_1 IS FALSE THEN
-> set @v_history_table_name=v_history_table_name;
-> select concat('insert into ', @v_history_table_name, ' values (10)') into the_query;
-> SET @stmt=the_query;
-> PREPARE STMT FROM @stmt;
-> EXECUTE STMT;
-> DEALLOCATE PREPARE STMT;
-> END IF;
-> IF done_1 THEN
-> LEAVE read_loop_1;
-> END IF;
-> END LOOP read_loop_1;
-> CLOSE cur1;
-> end$$
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;
mysql> call proc_drop_table();
Query OK, 0 rows affected (0.01 sec)

mysql> select * from test;
+------+
| id |
+------+
| 10 |
+------+
1 row in set (0.00 sec)

感谢各位的阅读,以上就是"MySQL游标多循环一次的问题怎么解决"的内容了,经过本文的学习后,相信大家对MySQL游标多循环一次的问题怎么解决这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

游标 问题 循环 语句 学习 内容 实际 实际上 就是 思路 情况 文章 方法 时候 更多 知识 知识点 篇文章 跟着 实践 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海购买网络技术转让产品 网络安全人才紧缺目录 毕节教育发布网络安全知识竞答赛 学软件开发需要掌握的几个点 全国网络安全大赛韩 远程数据库连接工具 服务器iis应用管理 威海行业专业软件开发 关系数据库应聘要什么 雅淘网络技术有限公司 国家网络安全基地宿舍 太云服务器 数据库 缓存不一致 区块链是一种分布式数据库技术 山西现代化软件开发出厂价格 我的世界手机服务器如何添加模组 软件开发软件销售区别 星宇收银数据库谁有 阴阳师服务器炸了 网络安全发第40条 数据库重置中断 闵行区智能软件开发服务价格 幼儿园网络安全从我做起征文 快捷的数据库备注方式mysql 无线网络技术第二版期末考试 cdn服务器应用场景 装备网络安全类型及应对措施 网络安全建设重建设轻测评 一键服务端报数据库错误 数据库怎么和百度地图链接
0