来源:网易云课堂《精通MySQL存储过程、函数和触发器》课程
讲师:huangxifeng607(黄锡峰)
笔记:
(1)declare处理程序与条件值示例
delimiter $$
create procedure testcursor()
begin
declare stopflag int default 0;
declare my_uname varchar(20);
declare uname_cur cursor for select uname from users where uid%2=0;
declare continue handler for not found set stopflag=1;
#continue是指执行什么样的handler的处理程序。
什么时候执行处理程序呢?在sqlstate的条件值为not found时执行
(2)declare处理程序
1.声明形式:
DECLARE handler_type HANDLER FOR condition_value[,...] sp_statement
ex: declare continue handler for not found set stopflag=1;
声明将一个句柄类型(处理程序)和指定的错误条件值以及设置的变量关联起来
2.处理程序handler_type
CONTINUE在代码块中继续,在循环中继续下一次循环
EXIT 退出BEGIN...END的代码块
UNDO (暂不支持)
(3)declare处理程序和条件综合示例
create procedure test_handler()
begin
declare stopflag=1
declare continue handler for SQLSTATE '23000' SET stopflag=1;
set stopflag=1;
select stopflag;
insert into user(uid) values(1);
set stopflag=2;
select stopflag;
insert into user(uid) values(1);
set stopflag=3;
select stopflag;
end;
(4)declare处理条件
1.声明形式:
DECLARE handler_type HANDLER FOR condition_value[,...] sp_statement
ex: declare continue handler for not found set stopflag=1;
2.条件值condition_value
SQLSTATE [VALUE]
SQLWARNING 是对所有以01开头的SQLSTATE代码的速记
NOT FOUND是对所有以02开头的SQLSTATE代码的速记
SQLEXCEPTION 是对所有没有被SQLWARNING和NOT FOUND捕获的SQLSTATE代码的速记
(5)小结
1.declare的处理程序
2.declare的处理条件值