DELIMITER //
drop procedure array_loop;
CREATE PROCEDURE array_loop(table_name varchar(255))
BEGIN
DECLARE i INT DEFAULT 0;
DECLARE array_fields VARCHAR(255) DEFAULT 'create_time,update_time,delete_time,create_by,update_by,delete_by';
DECLARE array_values VARCHAR(255) DEFAULT '1702020001164,1702020001164,0,1,1,0';
DECLARE delimiter VARCHAR(10) DEFAULT ',';
DECLARE array_length INT;
-- 计算数组长度
SET array_length = CHAR_LENGTH(array_values) - CHAR_LENGTH(REPLACE(array_values, delimiter, ''));
-- 循环遍历数组
WHILE i < array_length+1 DO
-- 在这里执行你的逻辑操作,使用 array_values 和 delimiter
-- 例如,使用 SUBSTRING_INDEX 函数提取数组元素
SET @field_name = SUBSTRING_INDEX(SUBSTRING_INDEX(array_fields, delimiter, -(array_length - i+1)),delimiter,1);
SET @field_value = SUBSTRING_INDEX(SUBSTRING_INDEX(array_values, delimiter, -(array_length - i+1)),delimiter,1);
-- 在这里处理 @current_value,例如打印输出
SELECT @field_name;
set @sql = concat('alter table ',table_name,' drop COLUMN IF EXISTS ',@field_name);
select @sql;
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
set @sql = concat('alter table ',table_name,' add ',@field_name,' bigint default 0 not null ');
select @sql;
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
set @sql = concat('update ',table_name,' set ',@field_name,' = ',@field_value);
select @sql;
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET i = i + 1;
END WHILE;
END //
call array_loop('sys_dict_types');
DELIMITER ;
Mysql 存储过程,批量修改字段结构
于 2023-12-14 14:57:29 首次发布