一.需求
表设计不当,需要把库内所有表的某列varchar设置为null。
设计可传参的存储过程,适合多个列置空。
二.创建存储过程和调用
以下示例中“库名”以实际为准,也可传入变量。
注意,表名在执行过程中是变量,需要用@sql进行拼接使用。
delimiter // #定义标识符为双斜杠
DROP PROCEDURE
IF EXISTS test ; #如果存在test存储过程则删除
CREATE PROCEDURE test (in columnName VARCHAR(35)) #创建无参存储过程,名称为test
BEGIN
DECLARE
tableName VARCHAR (32) ; #申明变量
DECLARE done INT DEFAULT 0;
DECLARE scene cursor for
SELECT
table_name
FROM
information_schema. COLUMNS
WHERE
table_schema = "库名"
AND column_name = columnName ;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
open scene;
REPEAT
fetch scene into tableName;
if not done then
set @sql=CONCAT('UPDATE ',tableName,' SET ', columnName,' = NULL' );
PREPARE stmt from @sql;
EXECUTE stmt;
END if;
until done end repeat;
close scene;
commit;
END
//
# 运行存储过程
CALL test ('create_name') ;
CALL test ('update_name') ;