delimiter $$ create procedure sp_test() BEGIN declare tmp varchar(1000); declare done int default -1; /* 声明游标 */ declare myCursor cursor for select str from tb_test; /* 当游标到达尾部时,mysql自动设置done=1 */ declare continue handler for not found set done=1; /* 打开游标 */ open myCursor; /* 循环开始 */ myLoop: LOOP /* 移动游标并赋值 */ fetch myCursor into tmp; if done = 1 then leave myLoop; end if; /* do something */ set @v_sql=tmp; --注意很重要,将连成成的字符串赋值给一个变量(能够以前没有定义,但要以@开头) prepare stmt from @v_sql; --预处理须要执行的动态SQL,其中stmt是一个变量 EXECUTE stmt; --执行SQL语句 deallocate prepare stmt; --释放掉预处理段 /* 循环结束 */ end loop myLoop; /* 关闭游标 */ close myCursor; END $$ delimiter ;