Oracle批量給分表新增字段

場景

        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、本人數據庫小菜,若有更好的解決方案望不吝分享,非常感謝

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章