分类
mysql

mysql 存储过程替换包含对应字段的表对的数据

-- 替换数据库中含有对应字段的表的对应的值
-- 创建存储过程之前需判断该存储过程是否已存在,若存在则删除
DROP PROCEDURE IF EXISTS replaceFieldValue;
-- 创建存储过程
CREATE PROCEDURE replaceFieldValue()
BEGIN
-- 定义变量
-- 便利时要用到的键
DECLARE listKey int DEFAULT 0;
-- 检查后遍历出的表名
DECLARE tableName varchar(256);
-- 要进行替换的字段
DECLARE replaceField varchar(256) default 'cpname';
-- 当前值
DECLARE nowValue varchar(256) default '类金融';
-- 准备替换成的值
DECLARE afterValue varchar(256) default '供应链金融';

-- 定义游标,并将sql结果集赋值到游标中
-- 查出所有包含对应字段的表
DECLARE tableList CURSOR FOR
(SELECT
TABLE_NAME 'table'
FROM
information_schema. COLUMNS
WHERE
COLUMN_NAME = replaceField);

-- 声明当游标遍历完后将标志变量置成某个值
DECLARE CONTINUE HANDLER FOR NOT FOUND SET listKey=1;

-- 整个存储过程指定为一个事务
start transaction;

-- 打开游标
open tableList;

-- 便利这些表,将当前的数据替换为之后的数据
fetch tableList into tableName;

-- 当s不等于1,也就是未遍历完时,会一直循环
while listKey <> 1 do

-- 执行业务逻辑
-- SELECT @tableName as 'table';
-- 替换对应字段的值
SET @STMT = CONCAT("update ", tableName, " set ", replaceField, "='", afterValue,"' where ", replaceField, "='", nowValue, "';");
SELECT @STMT as 'sql';
PREPARE STMT FROM @STMT;
EXECUTE STMT;
-- 当s等于1时表明遍历以完成,退出循环
fetch tableList into tableName;
end while;
-- 关闭游标
close tableList;
-- 提交事务
commit;
END;

-- 执行存储过程
call replaceFieldValue();

发表评论

邮箱地址不会被公开。 必填项已用*标注