第一个存储过程

编写了一个存储过程,简单的,功能是遍历某个数据库中所有表,并且查询每张表中某个字段的值是不是符合要求,也就是等于特定的值吗, 这里面有个前提条件就是每张表都有这个字段。

复制代码
-- 创建存储过程前先检查是否存在,存在就删除,这个慎用,不能乱删
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() 里面 单引号左右要间隔空格,不然运行总是报错,试出来的。

posted @   哩个啷个波  阅读(36)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示