제18장 DBMS_METADATA

내용 목차

18.1. 개요
18.2. 프러시저
18.2.1. GET_DDL

본 장에서는 DBMS_METADATA 패키지의 기본 개념과 패키지 내의 프러시저와 함수를 사용하는 방법을 설명한다.

DBMS_METADATA는 DB 오브젝트에 메타데이터 정보를 조회하여 생성 스크립트를 얻을 수 있는 함수를 제공한다. 메타데이터는 데이터 디렉터리 정보를 조회하여 생성한다.

DDL 생성 스크립트를 만들어주는 함수이다.

GET_DDL 함수의 세부 내용은 다음과 같다.

  • 프로토타입

    DBMS_METADATA.GET_DDL
    (
        object_type     IN              VARCHAR2,
        name            IN              VARCHAR2,
        schema          IN              VARCHAR2    DEFAULT NULL
    ) 
    RETURN CLOB;
  • 파라미터

    파라미터설명
    object_type

    메타데이터 추출 오브젝트 타입이다.

    다음에 대해서 기능을 제공한다.

    • TABLESPACE

    • TABLE

    • INDEX

    • MATERIALIZED_VIEW

    • MATERIALIZED_VIEW_LOG

    • CONSTRAINT

    name추출할 오브젝트 이름을 지정한다.
    schema오브젝트의 owner를 지정한다.
  • 예제

    SQL> create table emp(
      empno    number(4,0),
      ename    varchar2(10),
      job      varchar2(9),
      mgr      number(4,0),
      hiredate date
    );
    
    Table 'EMP' created.
    
    
    select to_char(dbms_metadata.get_ddl('TABLE', 'EMP', 'MY_USER')) from dual
    SQL> /
    
    TO_CHAR(DBMS_METADATA.GET_DDL('TABLE','EMP','MY_USER'))
    --------------------------------------------------------------------------------
    CREATE TABLE MY_USER.EMP
    (EMPNO NUMBER(4), ENAME VARCHAR(10), JOB VARCHAR(9), MGR NUMBER(4), 
    HIREDATE DATE)
    TABLESPACE USR
    PCTFREE 10 
    INITRANS 2 
    STORAGE(INITIAL 131072 NEXT 131072 MINEXTENTS 1 MAXEXTENTS 4294967295 
    BUFFER_POOL DEFAULT)
    LOGGING
    NOCOMPRESS
    NOPARALLEL
    DISABLE ROW MOVEMENT
    ;
    
    
    1 row selected.
    
    SQL> create table dept(
      deptno number(2,0),
      dname  varchar2(14),
      loc    varchar2(13),
      constraint pk_dept primary key (deptno)
    );   2    3    4    5    6 
    
    Table 'DEPT' created.
    
    SQL> select to_char(dbms_metadata.get_ddl('INDEX', 'PK_DEPT', 'MY_USER')) 
    from dual;
    
    TO_CHAR(DBMS_METADATA.GET_DDL('INDEX','PK_DEPT','MY_USER'))
    --------------------------------------------------------------------------------
    CREATE UNIQUE INDEX MY_USER.PK_DEPT ON MY_USER.DEPT
    (DEPTNO ASC)
    LOGGING TABLESPACE USR
    PCTFREE 10 INITRANS 2
    STORAGE(INITIAL 131072 NEXT 131072 MINEXTENTS 1 MAXEXTENTS 4294967295 
    BUFFER_POOL DEFAULT);