2010-03-15 111 views
3

如何在模式中的所有表中將CHAR替換爲VARCHAR2將CHAR替換爲VARCHAR2

注意:我滿足於返回ALTER TABLE語句的查詢,因此我可以保存該腳本並再次運行它。

+2

有一點要注意;您可能在新的'VARCHAR2'列中有尾隨空格,並且Oracle確實認爲'VARCHAR2'列中的尾隨空格是重要的,所以值'A'和'A''不等價。 – 2010-03-15 15:03:53

回答

6
select 'ALTER TABLE "' || owner || '"."' || table_name 
|| '" MODIFY ("' || column_name 
|| '" VARCHAR2(' || data_length || '));' 
from all_tab_columns tc 
where data_type = 'CHAR' 
and owner = :schemaname 
and exists (
    select 1 
    from all_tables t 
    where tc.owner = t.owner 
    and tc.table_name = t.table_name 
); 
+1

我已經擴展了原來的答案,以省略回收站中的表。見http://stackoverflow.com/questions/2446053/what-are-the-bin-tables-in-oracles-all-tab-columns-table – 2010-03-16 09:50:25