DECLARE s int default 0;
#声明游标cursor_name(cursor_name是个多行结果集)
DECLARE cursor_name CURSOR FOR select id ,name from from_data;
#设置一个终止标记
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET s=1;
set str = "--";
#打开游标
OPEN cursor_name;
#获取游标当前指针的记录,读取一行数据并传给变量a,b
-- fetch cursor_name into a,b;
#开始循环,判断是否游标已经到达了最后作为循环条件
while s <> 1 do
set str = concat(str,x);
fetch cursor_name into a,b;
insert into to_data(id,name) values(a,b);
end while;
#关闭游标
如果不在外边fetch,只在while内fetch ,上面代码执行结果会多出一条记录。据此推测, 这是因为s 的原因, 在最后一条记录fetch后, s不等于1, 需要再fetch下, s才等于1
网友评论