背景:專案中,需要給幾百張表添加相同的欄位,手動添加比較費勁,于是打算使用存盤程序實作,
撰寫的存盤程序:
delimiter // -- 創建存盤程序之前需判斷該存盤程序是否已存在,若存在則洗掉 DROP PROCEDURE IF EXISTS updateTables; -- 創建存盤程序 CREATE PROCEDURE updateTables() BEGIN -- 定義變數 DECLARE s int DEFAULT 0; DECLARE tableName varchar(100); DECLARE var_sql varchar(800); DECLARE cnt INT DEFAULT 0; -- 定義游標,并將sql結果集賦值到游標中 DECLARE report CURSOR FOR select table_name from information_schema.tables where table_schema='pbocbdms' and table_name like 'ods_%'; -- 宣告當游標遍歷完后將標志變數置成某個值 DECLARE CONTINUE HANDLER FOR NOT FOUND SET s=1; -- 打開游標 open report; -- 將游標中的值賦值給變數,注意:變數名不要和回傳的列名同名,變數順序要和sql結果列的順序一致 fetch report into tableName; -- 當s不等于1,也就是未遍歷完時,會一直回圈 while s<>1 do -- 執行業務邏輯 SELECT count(*) into cnt FROM information_schema.columns WHERE table_schema='pbocbdms' AND table_name = tableName AND column_name = 'xm_code'; -- 列不存在則可以添加 IF cnt = 0 THEN set var_sql = concat('alter table ',tableName,' add column xm_code varchar(50) COMMENT \'專案別名編碼\';'); set @sql = var_sql; PREPARE s1 from @sql; EXECUTE s1; deallocate prepare s1; END IF; -- 繼續抓取游標資料到變數 fetch report into tableName; end while; -- 關閉游標 close report; END // delimiter ;
呼叫存盤程序
call updateTables();
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/455539.html
標籤:MySQL
上一篇:mysql事務、觸發器、存盤程序
下一篇:mysql事務、觸發器、存盤程序
