2010-03-15 4 views
3

Comment puis-je remplacer CHAR par VARCHAR2 dans toutes les tables d'un schéma?Remplacer CHAR par VARCHAR2

Remarque: Je suis satisfait d'une requête renvoyant les instructions ALTER TABLE afin que je puisse enregistrer le script et l'exécuter à nouveau.

+2

Une chose à savoir; vous pouvez avoir des espaces de fin dans vos nouvelles colonnes 'VARCHAR2', et Oracle considère que les espaces de fin sont significatifs dans les colonnes' VARCHAR2', donc les valeurs ''A' et''A '' ne sont pas équivalentes. –

Répondre

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

J'ai étendu la réponse d'origine pour omettre les tables qui sont dans la corbeille. Voir http://stackoverflow.com/questions/2446053/what-are-the-bin-tables-in-oracles-all-tab-columns-table –