#游标,用SQL语句实现循环。但能不用游标就不要用,除非要对每一行数据分门别类地操作#假如想把A表的值导入应用于B表(A) id num (B) id num
1919+12828+2delimiter//createprocedure p6()BEGINdeclare row_id int;declare row_num int;declare done intdefaultfalse;declaretempint;declare my_cursor CURSORforselect id,num from A;#创建/声明游标,名称my_cursor 类型CURSOR 关键字fordeclarecontinuehandlerfornot found set done=true;#当游标内无值时,令done=trueopen my_cursor;#打开游标
xxoo:LOOP#随便取名,开始循环fetch mu_cursor into row_id,row_num;#用游标去拿每一行的数据if done then#如果游标内没有值了,则跳出循环 leave xxoo;endif;settemp= row_id + row_num;#让id和num相加insertinto B(number)values(temp);#插入B表endloop xxoo;close my_cursor;#关闭游标END//delimiter;
四、动态执行SQL
#SQL注入:常见的网络攻击形式。程序没有检测用户输入数据的合法性,攻击者可以在查询语句的末尾添加额外sql语句。#防SQL注入的工作可以在程序级别做,也可以在数据库级别做delimiter//createprocedure p8(in nid int)BEGINset@nid=nid;# 随便取名prepare prod from'select * from student where sid > ?';execute prod using@nid;#用这种引用型变脸替代上一行中的?deallocateprepare prod;#执行已格式化的SQL语句END//delimiter;