最近要往表里添加新的欄位,因為很多張表,但是都是這樣的:
ytx_qrcode_order_origin_201901,
ytx_qrcode_order_origin_201902,
ytx_qrcode_order_origin_201903
就是表名稱的后面是以日期作為結尾的,現在就是要給這些表都加一個欄位,如果一個個的添加就太慢了,在想有沒有什么方法 比如寫一個存盤程序,根據前面的名稱進行模糊匹配,然后對這些表進行一個欄位的添加?
uj5u.com熱心網友回復:
剛剛通過查詢 已經找到了一種方法 那就是使用GROUP_CONCAT拼接得到查詢的結果,然后拿這個結果去執行,因為表很多 所以我先設定了查詢的長度,不然查詢的長度不夠
SET SESSION group_concat_max_len = 10240;
接下來是結果的查詢
SELECT
GROUP_CONCAT('alter table ', table_schema, '.', table_name, ' add column platform_code varchar(50);' SEPARATOR "")
FROM information_schema.tables WHERE
table_schema='dcsbus' AND table_name LIKE 'ytx_qrcode_order%';
PS:platform_code是我要添加的欄位名稱,dcsbus是我的庫名,ytx_qrcode_order是我需要添加的表名 前綴都是一樣的
最后得到的結果是一個可以執行的sql陳述句,如下圖:

然后把里面的內容復制執行,程序大概等了1分多鐘。欄位目前是添加進來了,如下圖:

因為我對存盤程序這塊不太熟悉,看網上有使用純粹程序的方式來實作,鏈接:https://blog.csdn.net/showchi/article/details/100051625 沒太看懂,有沒有大佬看下如果使用存盤程序的話,這塊應該怎么修改?
uj5u.com熱心網友回復:
基本的ddl操作么,拼Alter陳述句的字串,再用腳本執行。https://blog.csdn.net/qq_39706570/article/details/106014157
主要是這兩句:
PREPARE sql_sentence FROM @sql_content;
/*注意引數順序。*/
EXECUTE sql_sentence USING @param_id,@param_id2;
uj5u.com熱心網友回復:
DROP PROCEDURE IF EXISTS testEndHandle;DELIMITER $$
CREATE PROCEDURE testEndHandle()
BEGIN
DECLARE s_tablename VARCHAR(100);
#查詢ytx_qrcode_order開頭的表
DECLARE cur_table_structure CURSOR
FOR
SELECT table_name
FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = 'dcsbus' AND table_name LIKE "ytx_qrcode_order%";
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET s_tablename = NULL;
OPEN cur_table_structure;
FETCH cur_table_structure INTO s_tablename;
WHILE ( s_tablename IS NOT NULL) DO
SET @MyQuery=CONCAT("alter table `",s_tablename,"` add COLUMN `platform_code` varchar(50) COMMENT '平臺CODE'");
PREPARE msql FROM @MyQuery;
EXECUTE msql ;#USING @c;
FETCH cur_table_structure INTO s_tablename;
END WHILE;
CLOSE cur_table_structure;
END;
$$
#執行存盤程序
CALL testEndHandle();
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/252328.html
標籤:Java EE
上一篇:小白求助:editplus編譯java程式時出錯,顯示無效的標記,但在dos視窗運行沒問題啊...
下一篇:密碼輸入顯示為*****
