注册
批量扩大表的字符类型字段长度(精度)
技术分享/ 文章详情 /

批量扩大表的字符类型字段长度(精度)

刘江 2024/11/22 403 0 2

某些特殊场景下需要批量扩大字符字段长度可以采用以下存储过程实现,实现逻辑比较简单,仅供参考
–创建存储过程

CREATE OR REPLACE PROCEDURE enlarge_char_varchar_columns(username  in varchar2) AS
DECLARE
v_sql varchar2(8000);
BEGIN
    FOR t IN (SELECT table_name, 
       column_name, 
       data_type, 
       data_length
  FROM dba_tab_columns
 WHERE TABLE_NAME IN (SELECT TABLE_NAME FROM dba_tables where owner = username) 
   AND data_type IN ('CHAR', 
                     'VARCHAR2', 
                     'VARCHAR') ) LOOP
        -- 计算新的列长度,扩大两倍
        DECLARE
            new_length NUMBER;
        BEGIN
            IF t.data_type = 'CHAR' THEN
            --使用LEAST函数保留扩充接口(可选不超过的最大限制)
                new_length := LEAST(t.data_length * 2); 
            ELSE
                new_length := LEAST(t.data_length * 2); 
            END IF;

            -- 构造并执行ALTER TABLE语句来修改列的长度
           v_sql :=  'ALTER TABLE '||username||'.'||t.table_name || ' MODIFY "' || t.column_name || '" ' ||
                              t.data_type || '(' || new_length || ')';
                              EXECUTE IMMEDIATE  v_sql;
        END;
    END LOOP;
EXCEPTION
    WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM);
END enlarge_char_varchar_columns;

–调用方法
–例如扩大TEST用户下所有表的字符类型字段为原来的两倍
call enlarge_char_varchar_columns(‘TEST’);

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服