내용 목차
본 장에서는 DBMS_DDL 패키지의 기본 개념과 패키지 내의 프러시저와 함수를 사용하는 방법을 설명한다.
DBMS_DDL CREATE OR REPLACE PROCEDURE, PACKAGE로 시작하는 DDL 구문에 대한 WRAPPING 기능 외 기타 DDL 관련 기능을 제공하는 패키지이다.
본 절에서는 DBMS_DDL 패키지에서 제공하는 프러시저와 함수를 알파벳 순으로 설명한다.
CREATE OR REPLACE PROCEDURE, FUNCTION, PACKAGE 또는 PACKAGE BODY로 시작하는 DDL 구문을 WRAPPING한 후, 해당 구문을 실행까지 하는 프러시저이다.
다음과 호출 결과가 동일하다.
EXECUTE IMMEDIATE DBMS_DDL.WRAP(ddl)
CREATE_WRAPPED 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_DDL.CREATE_WRAPPED ( ddl IN VARCHAR2 )
파라미터
파라미터 | 설명 |
---|---|
ddl | CREATE OR REPLACE PROCEDURE, FUNCTION, PACKAGE 또는 PACKAGE BODY로 시작하는 DDL 구문이다. tbwrap 툴과는 달리 하나의 DDL 구문만 입력할 수 있다. |
예제
create or replace procedure create_wrapped_example is hello_ddl varchar(1000) := 'create or replace procedure hello is str varchar(10) := ''hello''; begin DBMS_OUTPUT.PUT_LINE(str); end;'; begin DBMS_DDL.CREATE_WRAPPED(hello_ddl); end; /
DBMS_DDL.CREATE_WRAPPED 프러시저는 호출자 권한으로 실행되며, 해당 호출자의 Role은 참조하지 않도록 되어 있다. 그래서 호출자에게 CREATE ANY PROCEDURE 권한이 있어야 위 예제의 hello_ddl이 실행될 것이다.
TRIGGER의 속성 중 FireOnce 여부에 대해 리턴하는 함수이다.
IS_TRIGGER_FIRE_ONCE 함수의 세부 내용은 다음과 같다.
프로토타입
DBMS_DDL.IS_TRIGGER_FIRE_ONCE ( trig_owner IN VARCHAR2, trig_name IN VARCHAR2 ) RETURN BOOLEAN
파라미터
파라미터 | 설명 |
---|---|
trig_owner | TRIGGER 소유자 이름이다. |
trig_name | TRIGGER 이름이다. |
TRIGGER의 속성 중 FireOnce 여부를 변경하는 프러시저이다.
SET_TRIGGER_FIRING_PROPERTY 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_DDL.SET_TRIGGER_FIRING_PROPERTY ( trig_owner IN VARCHAR2, trig_name IN VARCHAR2, fire_once IN BOOLEAN )
파라미터
파라미터 | 설명 |
---|---|
trig_owner | TRIGGER 소유자 이름이다. |
trig_name | TRIGGER 이름이다. |
fire_once | 변경할 FireOnce 속성값이다. |
CREATE OR REPLACE PROCEDURE, FUNCTION, PACKAGE 또는 PACKAGE BODY로 시작하는 DDL 구문을 WRAPPING한 결과를 리턴하는 함수이다.
WRAPPING 결과는 아래와 같이 실행할 수 있다.
EXECUTE IMMEDIATE DBMS_DDL.WRAP(ddl)
프로토타입
DBMS_DDL.WRAP ( ddl IN VARCHAR2 ) RETURN VARCHAR2
파라미터
파라미터 | 설명 |
---|---|
ddl | CREATE OR REPLACE PROCEDURE, FUNCTION, PACKAGE 또는 PACKAGE BODY로 시작하는 DDL 구문이다. tbwrap 툴과는 달리 하나의 DDL 구문만 입력할 수 있다. |
예제
create or replace procedure wrap_example is hello_ddl varchar(1000) := 'create or replace procedure hello is str varchar(10) := ''hello''; begin DBMS_OUTPUT.PUT_LINE(str); end;'; begin EXECUTE IMMEDIATE DBMS_DDL.WRAP(hello_ddl); end; /