DROP PROCEDURE IF EXISTS mytest;
CREATE PROCEDURE mytest(ax VARCHAR(20))
BEGIN
-- 变量都写在处理程序前面定义
DECLARE pcname VARCHAR(255) DEFAULT '';
DECLARE allname VARCHAR(255) DEFAULT '';
DECLARE mastercount int DEFAULT 0;
DECLARE stableid VARCHAR(50) DEFAULT "";
DECLARE smasterkey VARCHAR(255) DEFAULT "";
DROP TEMPORARY TABLE IF EXISTS t2;
-- /*
CREATE TEMPORARY TABLE IF NOT EXISTS t2
(
PNo INT NOT NULL,
PName VARCHAR(50) NOT NULL
);
INSERT INTO t2 VALUES(1,'A'),(2,'B'),(3,'C'),(4,'D');
-- */
-- /*
BEGIN
DECLARE str VARCHAR(30) DEFAULT '';
DECLARE done INT DEFAULT 0;
DECLARE done2 INT DEFAULT FALSE;
DECLARE mycusor CURSOR FOR SELECT PName FROM t2;
-- DECLARE CONTINUE HANDLER FOR not found set done=1;
DECLARE CONTINUE HANDLER FOR not found set done2=TRUE;
OPEN mycusor;
/* While遍历方式
FETCH mycusor INTO str;
WHILE done=0 DO
SET allname=CONCAT(allname,str);
FETCH mycusor INTO str;
END WHILE;
*/
/* Loop遍历方式 testloop为自定义的名称
testloop:LOOP
FETCH mycusor INTO str;
IF done=1 THEN
LEAVE testloop;
END IF;
SELECT str;
SET allname=CONCAT(allname,str);
END LOOP testloop;
*/
#REPEAT 遍历方式
REPEAT
FETCH mycusor INTO str;
IF NOT done2 THEN
SET allname=CONCAT(allname,@str1);
END IF;
UNTIL done2 END REPEAT;
#关闭游标
CLOSE mycusor;
#查询遍历结果
SELECT allname;
END;
-- */
END
Mysql的游标遍历方式
最新推荐文章于 2023-11-15 14:23:37 发布