mysql高级 存储过程[2] handler 的continue 和 exit 还有[undo]
来源:互联网 发布:威廉古堡知乎 编辑:程序博客网 时间:2024/05/18 01:51
上一篇中, 的多取出, 逻辑错误:
create procedure p15()begin declare row_gid int;declare row_num int;declare row_name varchar(20); declare you int default 1; -- 标志declare getgoods cursor for select gid,name,number from goods; declare continue handler for NOT FOUND set you := 0; -- 如果为空设置为0 open getgoods;repeatfetch getgoods into row_gid,row_name,row_num;select row_num,row_name;until you=0 end repeat; -- 标志是否为0close getgoods;end$/* 逻辑错误多取出一行*/create procedure p16()begin declare row_gid int;declare row_num int;declare row_name varchar(20); declare you int default 1; -- 标志declare getgoods cursor for select gid,name,number from goods; declare exit handler for NOT FOUND set you := 0; -- 如果为空设置为0 open getgoods;repeatfetch getgoods into row_gid,row_name,row_num;select row_num,row_name;until you=0 end repeat; -- 标志是否为0close getgoods;end$/* fetch getgoods xxx。。。的语句后出发如果他continue只是在 fetch这句不再执行, 但是select这句还是在执行,所以不能让他单单跳过fetch这句得用exit这句让他全部跳过*/----------------------------------mysql> call p16()$+---------+----------+| row_num | row_name |+---------+----------+| 20 | cat |+---------+----------+1 row in set (0.05 sec)+---------+----------+| row_num | row_name |+---------+----------+| 20 | dog |+---------+----------+1 row in set (0.07 sec)+---------+----------+| row_num | row_name |+---------+----------+| 0 | pig |+---------+----------+1 row in set (0.08 sec)----------------------------------
如果不用上面的方法, 改用逻辑处理也可以
除了continue,exit外, 还有一种undo handler,
-- continue 触发后是后面语句继续执行-- exit 触发后是后面语句不执行-- undo 是触发后,前面的语句撤销(但是mysql还不支持)-- 若不用exit的话怎么办?create procedure p17()begin declare row_gid int;declare row_num int;declare row_name varchar(30);declare you int default 1;declare getgoods cursor for select gid,name,number from goods;declare continue handler for not found set you :=0;open getgoods;fetch getgoods into row_gid, row_name, row_num; -- 首先fetch一下repeatselect row_name, row_num;fetch getgoods into row_gid, row_name, row_num;until you=0 end repeat;close getgoods;end$-- repeat 就像do while一样----------------------------------------mysql> call p17$+----------+---------+| row_name | row_num |+----------+---------+| cat | 20 |+----------+---------+1 row in set (0.00 sec)+----------+---------+ | row_name | row_num |+----------+---------+| dog | 20 |+----------+---------+1 row in set (0.03 sec)+----------+---------+| row_name | row_num |+----------+---------+| pig | 0 |+----------+---------+1 row in set (0.04 sec)---------------------------------------
0 0
- mysql高级 存储过程[2] handler 的continue 和 exit 还有[undo]
- DECLARE CONTINUE/EXIT HANDLER FOR SQLSTATE 中CONTINUE和EXIT的区别
- [MySQL] 存储过程错误异常处理例子 --> DECLARE EXIT HANDLER FOR SQLEXCEPTION
- mysql高级:存储过程
- 记录exit,continue和return的用法
- continue,break和exit的区别
- continue exit 的作用
- mysql高级 存储过程[1]
- MySQL的redo和undo
- mysql 的 redo 和 undo
- MySQL 的redo 和 undo
- mysql的存储函数和存储过程
- oracle存储过程continue
- MySQL高级五——存储过程的管理
- PHP的continue、break、goto、exit和die的用法
- MySQL --- MySQL的定时器和存储过程
- 循环结构中break、continue、return和exit的区别
- 关于return、exit、continue和break的比较
- FusionCharts使用教程:为图表添加向下钻取链接
- 链表
- poj 1039 Pipe
- git常用命令
- 一般动画
- mysql高级 存储过程[2] handler 的continue 和 exit 还有[undo]
- Android 模拟器一键获取root权限 一键安装Google play 服务
- android 像素处理
- 同学小智智的腾讯面试之行---心理测试过程很精彩真实
- Web_PHP_PHPsubstr截取中文字符出现乱码解决;
- 创建SvcHost.exe调用的服务原理与实践
- java 工具集
- Win7下使用Putty代替超级终端通过COM串口连接开发板方法
- 0RA 29273 24247错误