求mysql的游标用法详细说明,最好有例子!!
发布网友
发布时间:2022-04-26 14:18
我来回答
共2个回答
热心网友
时间:2022-04-07 23:19
先声明一个游标,语法:
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。有什么问题我们再沟通啊。不知道你具体要问题的是什么。
热心网友
时间:2022-04-08 00:37
参看官方手册即可:
给你个例子:来自官方手册(5.5 en version),部分内容加了注解:
CREATE PROCEDURE curdemo()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
--下边声明两个游标,cur1, cur2
DECLARE cur1 CURSOR FOR SELECT id,data FROM test.t1;
DECLARE cur2 CURSOR FOR SELECT i FROM test.t2;
--下边声明handler,作用是在游标状态变量为not found时设置done=1
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
--打开游标
OPEN cur1;
OPEN cur2;
read_loop: LOOP
--获取游标指向的值到变量中
FETCH cur1 INTO a, b;
FETCH cur2 INTO c;
IF done THEN
LEAVE read_loop;
END IF;
IF b < c THEN
INSERT INTO test.t3 VALUES (a,b);
ELSE
INSERT INTO test.t3 VALUES (a,c);
END IF;
END LOOP;
--关闭游标
CLOSE cur1;
CLOSE cur2;
END;