Oracle-10g
更改表中的所有數據類型
我正在遷移一個數據庫,我需要更改“容器”,我不知道如何命名它。我舉一個例子來保持清楚:
老基地:
VARCHAR2(20 BYTE)
新基地:
VARCHAR2(20 CHAR)
我可以使用
alter...modify
查詢單獨完成,但準備查詢需要花費大量時間,因為表有一百或更多列。是否有任何腳本方式或查詢可以使用char更改所有****字節容器?
您可以使用一些動態 SQL。假設您要修改
VARCHAR2
一個表中的每一列DECLARE l_sql_stmt varchar2(1000); BEGIN FOR c IN (SELECT * FROM user_tab_columns WHERE data_type = 'VARCHAR2' AND table_name = <<table name>> AND char_used = 'B') LOOP l_sql_stmt := 'ALTER TABLE <<table name>> MODIFY( ' || c.column_name || ' VARCHAR2( ' || c.char_length || ' CHAR) )'; EXECUTE IMMEDIATE l_sql_stmt; END LOOP; END;
您可以在
modify
子句中一次修改多個列。例如,給定:create table modifyme ( col1 VARCHAR2(20 BYTE), col2 VARCHAR2(20 BYTE), col3 VARCHAR2(20 BYTE), col4 VARCHAR2(20 BYTE) );
你可以執行:
alter table modifyme modify ( col1 VARCHAR2(20 CHAR), col2 VARCHAR2(20 CHAR), col3 VARCHAR2(20 CHAR), col4 VARCHAR2(20 CHAR) );
使用與 Justins 類似的技術輕鬆編寫腳本。