場景
Oracle數據庫,給所有分表添加字段(FORMAT),我這裏的分表是每月創建,後綴如“201906”。
思路
根據表名規則獲取該用戶下的所有表名,生成批量SQL。
用到的函數
wm_concat()、replace()、to_char()
最終SQL
select to_char(replace(wm_concat('alter table '||table_name||' add FORMAT VARCHAR(18)'),',',';')) from user_tables where table_name like 'T_ORD_ORDER_2%';
SQL說明
1、查詢用戶的所有相關分表,表名“T_ORD_ORDER_[年月]”
select table_name from user_tables where table_name like 'T_ORD_ORDER_2%';
2、對查出的表名進行SQL拼接
(1)需要使用函數wm_concat(),該函數在10版本推出,可以把列值以英文逗號分隔起來並顯示成一行,例子:select wm_concat(name) from test;
實現的查詢結果爲“name1,name2,name3,……”
(2)在表名前後添加字符串,如: 'alter table '||table_name||' add FORMAT VARCHAR(18)'
(3)SQL拼接時,需要將英文逗號替換爲分號,使用函數replace()
REPLACE ( char, search_string [, replace_string]) 如果沒有指定replace_string 變量的值,那麼當發現search_string 變量的值時,就將其刪除。輸入可以爲任何字符數據類型——CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB或NCLOB。
3、使用函數wm_concat(),查詢出的結果類型爲CLOB,可以使用函數to_char()轉換輸出格式
注
1、確保使用like匹配出的所有分表完整且準確
2、如果使用其他方式(比如寫程序拼接SQL),需要確保分表存在
3、本人數據庫小菜,若有更好的解決方案望不吝分享,非常感謝