DECLARE v_1 VARCHAR(16)
DECLARE v_2 VARCHAR(16)
DECLARE c_XXX CURSOR FOR
SELECT c_1, c_2
FROM t_1
同时声明一个布尔型的变量FOUND,当循环的条件不成立时,结束循环用的。
DECLARE FOUND BOOLEAN DEFAULT TRUE
DECLARE CONTINUE HANDLER FOR NOT FOUND SET FOUND = FALSE
在使用游标的时候,要先打开游标,语法:OPEN c_XXX
使用的时候,要先打开游标,取出第一条数据,语法: FETCH c_XXX INTO v_1, v_2
然后才开始执行循环,语法:WHILE FOUND DO
执行需要执行的语句;
取下一条数据放到当前游标中,FETCH c_XXX INTO v_1, v_2
结束循环,语法:END WHILE
结束游标,语法:CLOSE c_cargo。有什么问题我们再沟通啊。不知道你具体要问题的是什么。
0 通过定义一个上下文管理者(即declare continue handler)来实现必须在游标定义后定义,并通过使用一个辅助变量来进行判断。
1 示例如下:
delimiter $
drop procedure if exists curdemo $
CREATE PROCEDURE curdemo(pid int)
BEGIN
DECLARE notfound INT DEFAULT 0 #定义一个辅助变量用于判断
DECLARE a int #定义游标输出值赋予的变量
DECLARE cur1 CURSOR FOR SELECT id FROM test.t where id= pid #定义游标
DECLARE CONTINUE HANDLER FOR NOT FOUND SET notfound = 1 #定义declare continue handler,这个会根据上下文是否有结果判断是否执行SET notfound = 1
OPEN cur1
FETCH cur1 INTO a
if notfound = 1 then
select 'no result'
#写业务逻辑
ELSE
select concat('result:', a)
#写业务逻辑
end if
CLOSE cur1
END
$
delimiter
call curdemo(240)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)