DATABASE/Oracle
[Oracle] 프로시저 내에서 DDL 실행하기 - Create, Drop, Atler, Truncate, CTAS
DANEW
2024. 11. 21. 09:52
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;
컴파일이 정상적으로 잘 되는것을 확인 할 수 있다.
반응형