数据库之 游标的解读和使用
游标
在前面的分析中可知sql的检索操作返回的数据几乎都是以整个集合的形式,也就是说sql善于将多条查询记录集中到一起并返回,倘若现在需要一行行地处理查询的结果,这对于sql语句来说确实是个难题,好在存在一种称为游标的技术可以解决这个问题,所谓的游标就就是可以将检索出来的数据集合保存在内存中然后依次取出每条数据进行处理,这样就解决了sql语句无法进行行记录处理的难题,游标的读取图解如下:
原表:
批量(游标)取值:
fetch 游标名称 into @变量1,@变量2,@变量3。。。//这里设置值跟查询语句的列一一对应。所以别写错位置了
mysql存储过程使用表名作为参数-----------实现动态游标
视图部分。
例如上述,我写的是利用游标,清空对应的表,但会出现表“不存在”的情况。
存储过程语句:
CREATE DEFINER=`root`@`%` PROCEDURE `sp_empty_table`()
BEGIN
declare flag int default 0;#定义标识变量用于判断是否退出循环
declare tmp varchar(40);#定义临时存储变量
declare cur cursor for select name from view_all_table where name not LIKE "sys_%" ;#声明游标
declare continue handler for not found set flag = 1; #异常处理并设置flag=1
open cur; # 打开游标
while flag!=1 do
fetch cur into tmp ;#从游标中取值并存放到tmp中
if flag !=1 then
SET @sqlcmd = concat("truncate table ", tmp);
prepare stmt from @sqlcmd;
execute stmt;
deallocate prepare stmt;
#truncate table tmp;
end if;
end while;
close cur; #关闭游标
END
本文由博客群发一文多发等运营工具平台 OpenWrite 发布
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341