第一个存储过程
编写了一个存储过程,简单的,功能是遍历某个数据库中所有表,并且查询每张表中某个字段的值是不是符合要求,也就是等于特定的值吗, 这里面有个前提条件就是每张表都有这个字段。
-- 创建存储过程前先检查是否存在,存在就删除,这个慎用,不能乱删 DROP PROCEDURE IF EXISTS selecttable; -- 存储过程 CREATE PROCEDURE selecttable; BEGIN -- 改变量用于标识是否还有数据需要遍历 DECLARE flag INT DEFAULT 0; -- 创建一个变量用于存储遍历过程中的值 DECLARE tablename varchar(255); -- 查询出需要遍历的数据集合,这里指定数据库下面所有表名 DECLARE table_list CURSOR FOR select table_name from information_schema.tables where table_schema='数据库名字'; --查询是否有下一个数据,没有将标识置为1,相当于hasnext DECLARE CONTINUE HANDLER FOR NOT FOUND SET flag = 1; -- 打开游标 OPEN table_list; --取值设置到临时变量中,我这里就一个字段 --注意:多个字段取值, 变量名不要和返回的列名同名,变量顺序要和sql结果列的顺序一致 FETCH table_list INTO tablename; --遍历未结束就一直执行 WHILE flag !=1 DO --targetsql //你想要执行的目标功能,这个可以写多个sql --注意:目标语句引用临时变量,实测发现不需要加@符号,但是搜索到的结果都是例如:@id,这样来使用 -- 我们这里直接用变量作为表明代码如下 注意定义sql语句,数据库字段进行编辑, set @sql = CONCAT('select * from 数据库名字.',tablename,' where xqdm = 000000 ' ); --从@sql准备stmt prepare stmt from @sql; --执行stmt execute stmt; --结束循环,下面这条语句会终止循环,如果不要请注释 drop prepare stmt; -- 一定要记得把游标向后移动一位, FETCH table_list INTO tablename; -- 当s等于1时表示遍历已完成,退出循环 END WHILE; -- 关闭游标 CLOSE table_list; END; --执行存储过程 call selecttable()
这里面需要注意的是concat() 里面 单引号左右要间隔空格,不然运行总是报错,试出来的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)