2010-03-15 2 views
3

을 스키마의 모든 테이블에서 VARCHAR2으로 대체하려면 어떻게합니까?CHAR을 VARCHAR2로 바꿉니다.

참고 : 나는 스크립트를 저장하고 다시 실행할 수 있도록 ALTER TABLE 문을 반환하는 쿼리에 만족합니다.

+2

주의해야 할 사항은 다음과 같습니다. 새로운'VARCHAR2' 칼럼에 후행 공백이있을 수 있으며 오라클은 후행 공백이'VARCHAR2' 칼럼에서 중요하다고 간주하므로 'A'와 'A'값은 동일하지 않습니다. –

답변

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을 참조하십시오. –