mysql过程函数:批量修改数据库中某个字段的值

CREATE DEFINER=`root`@`%` PROCEDURE `批量修改数据库中某个字段的值`(IN `oldData` VARCHAR(50),IN `newData` VARCHAR(50),IN `fieldName` VARCHAR(50),IN `databaseName` VARCHAR(50))
BEGIN
    #Routine body goes here...
    -- 定义循环条件
    DECLARE flag INT DEFAULT 0; 
    -- 保存表名
    DECLARE tname VARCHAR(50);
    -- 查询数据库databaseName中含有fieldName列的表,如果区分大小写使用binary COLUMN_NAME = 'userId'
    DECLARE result CURSOR FOR SELECT TABLE_NAME FROM  INFORMATION_SCHEMA.Columns WHERE TABLE_SCHEMA = databaseName AND  COLUMN_NAME = fieldName;
    -- 退出循环
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET flag = 1; 
    -- 打开游标
    OPEN result;
            WHILE flag <> 1 DO
            -- 游标指向下一个位置,可以有多个数据,比如FETCH result INTO tname,ttype,...;
            FETCH result INTO tname;
                    -- 拼接字符串表名sql,根据需要使用CONCAT函数连接
                    -- SET @execSql = CONCAT('SELECT * FROM  ',tname,' WHERE imei = ',oldImei,' ;'); 
                    SET @execSql = CONCAT('UPDATE ', tname, ' SET ',fieldName,' =  ',"'",newData,"'",' WHERE ',fieldName,' = ',"'",oldData,"'",';'); 
                    PREPARE stmt FROM @execSql;
                    EXECUTE stmt;
            END WHILE;
END

调用方式:
    CALL 批量修改数据库中某个字段的值('旧值','新值','字段名','数据库名');
参数详解:
    oldData:  旧字段值
    newData: 新字段值
    fieldName: 字段名
    databaseName: 数据库名称

猜你喜欢

转载自blog.csdn.net/zjb1697922408/article/details/128547535