在语法上MySQL和slqserver 还是有很大区别。
下面我们来看一下mysql 和SQLServer在 动态sql ,游标,作业方面的一些差异。
===============动态sql===============
在SQLServer中 动态sql 是使用关键字 execute 或是 sp_executesql 执行的
但在MySQL 中就不是了,下面我们看一下在MySQL中是执行动态sql的
set @queryTest='select * from test';
prepare stmt from @queryTest;
execute stmt ;
deallocate prepare smtm ;
===========mysql 中的游标
在mysql 和SQLServer 中游标也需要执行5个步骤,
但是还是有区别的。
1.声明游标
2.声明游标退出变量
3.打开游标
4.遍历游标
5.关闭游标
下面是一个具体的实例:
值得注意的,MySQL中没有块这个概念,也就是说 不能把游标,循环,判断之类的语句单独执行
,必须在一个对各对象中,例如:sp,或是函数,
delimiter $$
create procedure sp_curosr()
begin
declare cur cursor for select id from test where id <100; -- 声明游标
declare continue handler for not found set done=1 -- 定义遍历结束变量
declare nid int;
open cur ; 打开游标
fetch cur into nid ; -- 读取游标
while done=0 do
delete from test where id =nid ;
fetch cur into nid ;
end while ;
close cur; -- 关闭游标
end ;
$$ delimiter ;
以上就是MySQL的游标语法。
需要注意的几点:
1.MySQL中使用declare 声明的标量必须在对象体的最上面。
2.上面的第二步可以使用下面语句替代
declare continue handler for sqlstate '02000' set done=1
大致意思就是,当fetch 读取不到数据的时候 将done设置为1 ,
转载于:https://blog.51cto.com/dwchaoyue/1340712