2011-11-01 6 views
1

Oracle 블록에서 ddl 스크립트를 실행하는 것에 대한 질문이 있습니다.DDL이 Oracle 블록 내부에서 예상대로 작동하지 않습니다.

기본적으로 나는 데이터 이전을 위해 뭔가를 원합니다. 열의 데이터 유형이 변경된 경우 먼저 임시 열을 작성하고 원본 열 데이터를 임시 열에 복사 한 다음 원본 열을 삭제하고 임시 열 이름을 소스로 변경하여 마이그레이션 프로세스를 마쳐야합니다. 그러나 아래 스크립트를 실행하면 새 임시 열을 만들고 데이터를 새 열로 복사하지만 마지막 두 개의 alter table 명령은 실행하지 않습니다. 문제가 무엇인지 알아낼 수 있습니까? 감사.

create table t (a int); 

    insert into t values(10); 

    --change the data type from integer to varchar2(10); 
    begin 
     execute immediate 'alter table t modify a varchar2(10)'; 
    exception when others then 
     begin 
     execute immediate 'alter table t add b varchar2(10)'; 
     execute immediate 'update t set b = a'; 
     execute immediate 'alter tabe t drop column a'; 
     execute immediate 'alter table t rename column b to a'; 
     exception when others then 
     dbms_output.put_line('cann''t change column a from integer to varchar2(10) due to error:' || sqlerrm); 
     end; 
    end; 
    /

답변

2

드롭 열이 명령은 오타가 변경 참조 할 권리 "타베을 ... 변경?" 실행하려는 코드 인 경우이 명령문에 도달하자마자 오류 메시지가 표시되고 프로 시저에서는 처음 두 명령문 만 실행합니다.

+0

DCookie에 감사드립니다. 모든 명령이 문제없이 실행되고 있다고 생각하기 때문에 serveroutput을 설정하는 것을 잊어 버렸습니다. – Jerry

+3

그런 경우에는 예외 처리기를 사용하지 않는 것이 좋습니다. ;-) – DCookie

관련 문제