博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySql 存储过程 光标只循环一次
阅读量:5159 次
发布时间:2019-06-13

本文共 1851 字,大约阅读时间需要 6 分钟。

【1】MqSql 存储过程 光标只循环一次

针对MySql存储过程,光标只循环一次就退出的场景,可能原因分析:

(1)存储过程有问题(仔细检查语法、控制变量、条件等等)

(2)保证存储过程正确。调用过程异常(即光标失效):

可能因为循环体内的Sql语句使用了select语句,如果有一个select语句查询结果为空时,循环就会结束!

那么,想要循环继续,需要在每个select语句后重置循环标志位为0,让它继续循环下去......

如下存储过程 语句(更正后):

1 DELIMITER $$ 2 DROP PROCEDURE IF EXISTS `demo`$$ 3 CREATE DEFINER=`root`@`%` PROCEDURE `demo`(IN para_product_id VARCHAR(32), IN para_cycle_id VARCHAR(32)) 4 BEGIN 5     # 声明变量 6     DECLARE var_call_type INT DEFAULT 0; 7     DECLARE var_fee_rate INT; 8     DECLARE var_fee_unit INT; 9     DECLARE var_np_id VARCHAR(36);10     # 游标循环控制变量11     DECLARE done INT DEFAULT 0;12     # 声明游标    13     DECLARE idCur CURSOR FOR SELECT call_type, np_id, fee_unit, fee_rate14                  FROM cfg_fee_rate15                  WHERE product_id = IFNULL(para_product_id, '0000')16                  ORDER BY LEVEL DESC;17     DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;18     19     # 打开游标20     OPEN idCur;21     # 循环开始22     REPEAT23       FETCH idCur INTO var_call_type, var_np_id, var_fee_unit, var_fee_rate;24           IF NOT done THEN25           # 第一个select语句26           SELECT fee_rate, fee_unit INTO var_fee_rate, var_fee_unit FROM cfg_np_rate 27           WHERE np_id = IFNULL(var_np_id, 'none') ORDER BY call_type DESC LIMIT 1;28           SET done = 0; # 这里很关键::因为如果select查询不到数据项直接退出循环29           # 第二个select语句30           SELECT fee_rate, fee_unit INTO var_fee_rate, var_fee_unit FROM cfg_np_rate 31           WHERE np_id = IFNULL(var_np_id, 'none') AND (1 = call_type OR '1' = call_type);32           SET done = 0; # 这里很关键::因为如果select查询不到数据项直接退出循环33           # .... 其他语句34       END IF;35     UNTIL done END REPEAT; # 循环结束36     CLOSE idCur; # 关闭游标37 END$$38 39 DELIMITER ;

MySql存储过程经典坑之一。

追加 解释图如下:

存储过程。

 

Good Good Study, Day Day Up.

顺序 选择 循环 总结

转载于:https://www.cnblogs.com/Braveliu/p/10144510.html

你可能感兴趣的文章
一、浏览器生成消息(1)
查看>>
如何让phpstorm支持.install .inc
查看>>
游戏代码
查看>>
Django 模板系统
查看>>
第二次实验报告
查看>>
spring boot
查看>>
webapck html-loader 静态html模块化
查看>>
Python编程之基础知识练习_002
查看>>
了解网页结构
查看>>
Java虚拟机1:什么是Java
查看>>
【转载】nmap 官方指南
查看>>
JQuery学习笔记
查看>>
Eclipse导出JAR过程
查看>>
关于 StreamReader 的 ReadToEnd() 方法
查看>>
定时备份mysql数据库
查看>>
B. Greg and Graph
查看>>
判断SDK中的DLL位数(32位还是64位)
查看>>
转:程序员学习能力提升三要素
查看>>
《Linux4.0设备驱动开发详解》笔记--第十章:Linux设备驱动中的中断与时钟
查看>>
图形整体拉出效果
查看>>