2010-03-15 105 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