存储过程——遍历结果集, 在循环外先要 fetch

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

你可能感兴趣的:(存储过程——遍历结果集, 在循环外先要 fetch)