Oracle-10g

更改表中的所有數據類型

  • July 18, 2017

我正在遷移一個數據庫,我需要更改“容器”,我不知道如何命名它。我舉一個例子來保持清楚:

老基地:

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 類似的技術輕鬆編寫腳本。

引用自:https://dba.stackexchange.com/questions/57639