mysql 存储过程(一)

遍历库中所有表, 更新指定字段为指定的值。(*有的表存在该字段,有的则不存在)

drop PROCEDURE if exists update_orgCode;
delimiter//
create procedure update_orgCode(IN SEND_SYSTEM VARCHAR(50),IN UPLOAD_ORG_CODE VARCHAR(50),IN PROVIDER_NAME VARCHAR(50))
begin

    DECLARE tablename VARCHAR(30);
    /* 遍历游标结束标志 */
    DECLARE Done INT DEFAULT 0;
    DECLARE err,err2 INT DEFAULT 0;
    /* 定义预处理sql语句 */
    DECLARE SQL_FOR_UPDATE VARCHAR(500);
    /* 申明游标 */
    DECLARE rs CURSOR FOR select table_name from information_schema.tables where table_schema='ehr10';
    /* 游标异常处理 */
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET Done = 1; /*when "not found" occur,just continue,这个是个条件处理,针对NOT FOUND的条件*/  
    /* update 异常处理1 */
    DECLARE CONTINUE HANDLER FOR 1054 SET err = 1; /*when "Unknown column 'SEND_SYSTEM' in 'field list'" occur,just continue,这个是个条件处理,针对NOT FOUND的条件*/ 
    /* update 异常处理2 */
    DECLARE CONTINUE HANDLER FOR 1062 SET err2 = 1; /*[Err] 1062 - Duplicate entry '10839-xianfengYL-xianfengYL' for key 'PRIMARY'" occur,just continue,这个是个条件处理,针对NOT FOUND的条件*/ 

    /* 打开游标 */
    open rs;

        /* 获取表名 */
        FETCH rs INTO tablename;

        /* 遍历开始 */
        REPEAT

            SET SQL_FOR_UPDATE = CONCAT("UPDATE ",tablename," SET SEND_SYSTEM = '",SEND_SYSTEM,"',UPLOAD_ORG_CODE='",UPLOAD_ORG_CODE,"',PROVIDER_NAME='",PROVIDER_NAME,"';");   -- 拼接查询sql语句
            SET @sql = SQL_FOR_UPDATE;
            PREPARE stmt FROM @sql;         -- 预处理动态sql语句
            IF err THEN SET err = 0;    -- 预处理sql 不成功, 改变 重置 err
            ELSE        -- 预处理 sql 成功, 执行 update sql
                EXECUTE stmt ;                  -- 执行sql语句
                deallocate prepare stmt;      -- 释放prepare
            END IF;

            IF err2 THEN select tablename;set Done = 1;     -- 输出表名,退出遍历
            END IF;

            /* 调试 */
            -- SELECT tablename;

            /* 获取表名 */
            FETCH rs INTO tablename;

        /* 遍历结束 */
        UNTIL Done END REPEAT;

    /* 关闭游标 */
    close rs;
end;
//
delimiter;

refrences

我的MYSQL学习心得(十) 自定义存储过程和函数

mysql存储过程详解

mysql存储过程之游标遍历数据表

MySql存储过程—7、游标(Cursor)

MySQL存储过程调试?

mysql 存储过程中使用动态sql语句

MySQL存储过程中捕获异常的方法

mysql存储过程之异常处理篇

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值