본문 바로가기
DATABASE/Oracle

[Oracle] 프로시저 내에서 DDL 실행하기 - Create, Drop, Atler, Truncate, CTAS

by DANEW 2024. 11. 21.

Procedure 내에서 DDL 실행

Oracle의 프로시저 내에서는 DDL문을 바로 실행 할 수 없다.

create or replace procedure UP_BAN_TEST is
begin
    create table XTMP_DDL_TABLE (t_no number(10));

end;

위와 같은 프로시저를 생성하면, 컴파일 시 아래와 같은 오류가 발생한다. (Error: PLS-00103)

 

Oracle의 프로시저는 컴파일 시 문법적 오류를 확인하며 실행 계획을 미리 정하는데, DDL은 실제 런타임에만 실행이 가능하여 실행 계획을 미리 정할 수 없어 오류가 발생하게 된다.

 

동적 쿼리 실행

프로시저 내에서 DDL문을 실행하기 위해서는 동적쿼리를 실행하는 방식으로 작성하여 실행하도록한다.

 

주로 CTAS, CREATE, ALTER, TRUNCATE, DROP등의 명령어를 실행하기 위해 아래와같이 사용한다.

 

EXECUTE IMMEDIATE '[실행할 DML 문]';

 

위처럼 동적쿼리로 감싸서 실행하는 프로시저로 위의 예시 프로시저를 변경해보았다.

 

create or replace procedure UP_BAN_TEST is
begin
    EXECUTE IMMEDIATE 'create table XTMP_DDL_TABLE (t_no number(10))';
end;

 

컴파일이 정상적으로 잘 되는것을 확인 할 수 있다.

반응형