mysql 游标的使用
之前在使用存储过程,一般是在数据库指定查询数据,然后修改数据。所以,一直都没有使用到游标。一直到某天,在使用存储过程中,我希望使用一个类似java的集合的场景(假如不使用游标,那么会增加很多sql查询!)
DROP PROCEDURE if EXISTS demoPro;
CREATE PROCEDURE demoPro()
BEGIN
DECLARE done int DEFAULT 0; -- 若为1/true 则结束循环,类似java程序里的boolean变量的标示
DECLARE a,b VARCHAR(255); -- 接收 id和name的变量
DECLARE cur1 CURSOR FOR SELECT id,name from user where id=1; -- 这里是测试,只查询一条
DECLARE CONTINUE HANDLER for not FOUND set done=1; -- 游标的固定写法,较普遍
-- DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; --游标的固定写法,较少使用
OPEN cur1;-- 打开游标
REPEAT-- 循环
FETCH cur1 INTO a,b; -- 把游标内的数据放到临时变量
SELECT CONCAT(a,b); -- 拼接输出(演示效果)
UNTIL done end REPEAT; -- 根据条件,结束循环
CLOSE cur1; -- 关闭游标 是close不是end,一直end end 写习惯了,掉了一个小坑
end;
好了,执行完毕,就可以查看游标的效果了。
CALL demoPro();