标签:-- LOOP循环
CREATE PROCEDURE `test`.`new_procedure` ()
BEGIN
-- 需要定义接收游标数据的变量
DECLARE a CHAR(16);
-- 游标
DECLARE cur CURSOR FOR SELECT i FROM test.t;
-- 遍历数据结束标志
DECLARE done INT DEFAULT FALSE;
-- 将结束标志绑定到游标
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
-- 打开游标
OPEN cur;
-- 开始循环
read_loop: LOOP
-- 提取游标里的数据,这里只有一个,多个的话也一样;
FETCH cur INTO a;
-- 声明结束的时候
IF done THEN
LEAVE read_loop;
END IF;
-- 这里做你想做的循环的事件
INSERT INTO test.t VALUES (a);
END LOOP;
-- 关闭游标
CLOSE cur;
END;
注:变量的定义不要和你的select的列的键同名!不然,fetch into 会失败!
另外 :
如果没有则插入数据,如果有则更新的方法:
insert into `test` values (a,b) ON DUPLICATE KEY UPDATE `a`=c;
-- while循环
create procedure curdemo()
begin
declare stop_flag int DEFAULT 0;//声明一个标记,当游标状态为最后一条记录时,修改该变量
declare id int default 0;
declare type int default 0;
declare order1 int default 0;
declare cur1 cursor for select * from test1;
declare CONTINUE HANDLER FOR SQLSTATE ‘02000‘ SET stop_flag=1;
open cur1;//打开游标
fetch cur1 into id,type,order1;读取数据到游标
while stop_flag<>1 DO//若游标有下一条记录,循环
insert into test2 values(id,type,order1);
fetch cur1 into id,type,order1;
end while;
close cur1;//关闭游标
end;
标签: