DBMS_METADATA

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

개요

DBMS_METADATA는 DB 객체를 재생성하기 위해 사용할 수 있는 XML 문서나 DDL 문을 획득하거나 수정할 수 있는 패키지입니다.

  • 타입

CREATE OR REPLACE TYPE sys.ku$_parsed_item AS OBJECT (
    item          VARCHAR2(30),
    value         VARCHAR2(4000),
    object_row    NUMBER );
/

CREATE OR REPLACE PUBLIC SYNONYM ku$_parsed_item FOR sys.ku$_parsed_item;

CREATE OR REPLACE TYPE sys.ku$_parsed_items IS TABLE OF sys.ku$_parsed_item;
/

CREATE OR REPLACE PUBLIC SYNONYM ku$_parsed_items FOR sys.ku$_parsed_items;

CREATE OR REPLACE TYPE sys.ku$_ddl AS OBJECT (
    ddlText CLOB,
    parsedItems sys.ku$_parsed_items );
/

CREATE OR REPLACE PUBLIC SYNONYM ku$_ddl FOR sys.ku$_ddl;

CREATE OR REPLACE TYPE sys.ku$_ddls IS TABLE OF sys.ku$_ddl;
/

CREATE OR REPLACE PUBLIC SYNONYM ku$_ddls FOR sys.ku$_ddls;

CREATE OR REPLACE TYPE sys.ku$_multi_ddl AS OBJECT (
    object_row NUMBER,
    ddls sys.ku$_ddls );
/

CREATE OR REPLACE PUBLIC SYNONYM ku$_multi_ddl FOR sys.ku$_multi_ddl;

CREATE OR REPLACE TYPE sys.ku$_multi_ddls IS TABLE OF sys.ku$_multi_ddl;
/

CREATE OR REPLACE PUBLIC SYNONYM ku$_multi_ddls FOR sys.ku$_multi_ddls;

CREATE OR REPLACE TYPE sys.ku$_ErrorLine IS OBJECT (
    errorNumber NUMBER,
    errorText VARCHAR2(2000) );
/

CREATE OR REPLACE TYPE sys.ku$_SubmitResult AS OBJECT (
    ddl             sys.ku$_ddl,
    errorLines      sys.ku$_ErrorLines );
/
CREATE OR REPLACE TYPE sys.ku$_SubmitResults IS TABLE OF sys.ku$_SubmitResult;
/

CREATE OR REPLACE PUBLIC SYNONYM ku$_SubmitResults FOR sys.ku$_SubmitResults;

프러시저와 함수

ADD_TRANSFORM

CONVERT, FETCH_DDL, FETCH_XML 등에 적용될 transform을 추가합니다.

ADD_TRANSFORM 함수의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

handle

OPEN 또는 OPENW 함수를 통해 획득한 handle

name

  • DBMS_METADATA에서 제공하는 transform 이름

  • 현재는 'DDL', 'MODIFY'를 제공

  • 'DDL' : XML을 DDL구문으로 변환하는 transform

  • 'MODIFY' : XML 내용을 수정하는 transform

encoding

현재 사용 불가

object_type

현재 사용 불가

  • 반환값

OPEN, OPENW의 반환값과는 다른 transform handle(SET_TRANSFORM_PARAM, SET_REMAP_PARAM의 파라미터로 사용됨)

  • 예외 상황

예외 상황
설명

INVALID_ARGVAL

handle이 NULL이거나 invalid

INVALID_OPERATION

FETCH_DDL, FETCH_XML 수행 후에는 호출할 수 없음

  • 예제

CLOSE

OPEN, OPENW의 반환값인 handle을 정리합니다.

CLOSE 프러시저 의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

handle

OPEN 또는 OPENW 함수를 통해 획득한 handle

  • 예외 상황

예외 상황
설명

INVALID_ARGVAL

handle이 NULL이거나 invalid

  • 예제

CONVERT

입력된 XML 문서를 DDL로 변환합니다.

CONVERT 프러시저의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

handle

OPENW 함수를 통해 획득한 handle

document

입력 XML 문서

result

결과 DDL

  • 예외 상황

예외 상황
설명

INVALID_ARGVAL

handle이 NULL이거나 invalid

INCONSISTENT_OPERATION

handle에 'DDL' transform이 추가되어 있지 않음

  • 예제

FETCH_DDL

DDL을 출력합니다.

FETCH_DDL 함수의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

handle

OPEN 함수를 통해 획득한 handle

  • 반환값

결과 DDL(모든 DDL이 return된 후에는 NULL)

  • 예외 상황

예외 상황
설명

INVALID_ARGVAL

handle이 NULL이거나 invalid

INCONSISTENT_OPER ATION

handle에 'DDL' transform이 추가되어 있지 않음

  • 예제

FETCH_XML

XML을 출력합니다.

FETCH_XML 함수의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

handle

OPEN 함수를 통해 획득한 handle

  • 반환값

결과 XML(모든 XML이 return된 후에는 NULL)

  • 예외 상황

예외 상황
설명

INVALID_ARGVAL

handle이 NULL이거나 invalid

INCONSISTENT_OPERATION

handle에 'DDL' transform이 추가되어 있음

  • 예제

GET_DDL

객체의 DDL을 출력합니다.

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

  • 프로토타입

  • 파라미터

파라미터
설명

object_type

  • 출력하고자 하는 객체 타입

  • OPEN, OPENW에서 사용하는 object_type 파라미터와 동일한 값을 사용하면 됨

name

객체의 이름

schema

객체의 스키마 이름

version

현재 사용 불가

model

현재 사용 불가

transform

현재 사용 불가

  • 반환값

결과 DDL

  • 예외 상황

예외 상황
설명

OBJECT_NOT_FOUND

객체를 찾지 못함

  • 예제

GET_DEPENDENT_DDL

종속 객체의 DDL을 출력합니다.

GET_DEPENDENT_DDL 함수의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

object_type

  • 출력하고자 하는 객체 타입

  • OPEN, OPENW에서 사용하는 object_type 파라미터와 동일한 값을 사용하면 됨

base_object_name

부모 객체의 이름

base_object_schema

부모 객체의 스키마 이름

version

현재 사용 불가

model

현재 사용 불가

transform

현재 사용 불가

object_count

현재 사용 불가

  • 반환값

결과 DDL

  • 예외 상황

예외 상황
설명

OBJECT_NOT_FOUND

객체를 찾지 못함

  • 예제

GET_DEPENDENT_XML

종속 객체의 XML을 출력합니다.

GET_DEPENDENT_XML 함수의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

object_type

  • 출력하고자 하는 객체 타입

  • OPEN, OPENW에서 사용하는 object_type 파라미터와 동일한 값을 사용하면 됨

base_object_name

부모 객체의 이름

base_object_schema

부모 객체의 스키마 이름

version

현재 사용 불가

model

현재 사용 불가

transform

현재 사용 불가

object_count

현재 사용 불가

  • 반환값

결과 XML

  • 예외 상황

예외 상황
설명

OBJECT_NOT_FOUND

객체를 찾지 못함

  • 예제

GET_GRANTED_DDL

부여된 객체의 DDL을 출력합니다.

GET_GRANTED_DDL 함수의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

object_type

  • 출력하고자 하는 객체 타입

  • OPEN, OPENW에서 사용하는 object_type 파라미터와 동일한 값을 사용하면 됨

grantee

수혜자의 이름

version

현재 사용 불가

model

현재 사용 불가

transform

현재 사용 불가

object_count

현재 사용 불가

  • 반환값

결과 DDL

  • 예외 상황

예외 상황
설명

OBJECT_NOT_FOUND

객체를 찾지 못함

  • 예제

GET_GRANTED_XML

부여된 객체의 XML을 출력합니다.

GET_GRANTED_XML 함수의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

object_type

  • 출력하고자 하는 객체 타입

  • OPEN, OPENW에서 사용하는 object_type 파라미터와 동일한 값을 사용하면 됨

grantee

수혜자의 이름

version

현재 사용 불가

model

현재 사용 불가

transform

현재 사용 불가

object_count

현재 사용 불가

  • 반환값

결과 XML

  • 예외 상황

예외 상황
설명

OBJECT_NOT_FOUND

객체를 찾지 못함

  • 예제

GET_XML

객체의 XML을 출력합니다.

GET_XML 함수의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

object_type

  • 출력하고자 하는 객체 타입

  • OPEN, OPENW에서 사용하는 object_type 파라미터와 동일한 값을 사용하면 됨

name

객체의 이름

schema

객체의 스키마 이름

version

현재 사용 불가

model

현재 사용 불가

transform

현재 사용 불가

  • 반환값

결과 XML

  • 예외 상황

예외 상황
설명

OBJECT_NOT_FOUND

객체를 찾지 못함

  • 예제

OPEN

DBMS_METADATA 패키지에서 사용할 handle을 생성합니다.

OPEN 함수의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

object_type

객체 타입은 "[객체 타입]"을 참고

version

현재 사용 불가

model

현재 사용 불가

network_link

현재 사용 불가

  • 반환값

내부에서 정의된 handle(다른 함수나 프로시저의 파라미터로 사용됨)

  • 예외 상황

예외 상황
설명

INVALID_ARGVAL

잘못된 파라미터가 입력됨

INVALID_OPERATION

FETCH_DDL, FETCH_XML 수행 후에는 호출할 수 없음

  • 예제

OPENW

패키지에서 사용할 쓰기 전용 handle을 생성합니다.

OPENW 함수의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

object_type

객체 타입은 "[객체 타입]"을 참고

version

현재 사용 불가

model

현재 사용 불가

[객체 타입]

객체 타입
설명
객체 타입 유형

CONSTRAINT

제약조건

SND

FUNCTION

사용자 함수

SN

INDEX

인덱스

SND

JAVA_SOURCE

자바 객체

SN

JOB

작업

S

LIBRARY

라이브러리

SN

MATERIALIZED_VIEW

실체화 뷰

SN

MATERIALIZED_VIEW_LOG

실체화 뷰 로그

D

OBJECT_GRANT

스키마 객체 특권

DG

PACKAGE

패키지(패키지 선언과 본문을 모두 포함)

SN

PACKAGE_SPEC

패키지 선언

SN

PACKAGE_BODY

패키지 본문

SN

PROCEDURE

프러시저

SN

PROFILE

프로파일

N

REF_CONSTRAINT

참조 무결성 제약조건

SND

ROLE

역할

N

ROLE_GRANT

역할 특권

G

SEQUENCE

시퀀스

SN

SYNONYM

동의어(PUBLIC도 스키마처럼 사용)

SN

SYSTEM_GRANT

시스템 특권

G

TABLE

테이블

SN

TABLESPACE

테이블 스페이스

N

TRIGGER

트리거

SND

TYPE

사용자 정의 타입(사용자 정의 타입 선언과 본문을 모두 포함)

SN

TYPE_SPEC

사용자 정의 타입 선언

SN

TYPE_BODY

사용자 정의 타입 본문

SN

USER

사용자

N

VIEW

SN

다음은 객체 타입 유형의 의미입니다.

- S : 스키마 객체 (Schema objects). 스키마에 속한 객체 타입

- N : 이름이 있는 객체 (Named objects)

- D : 종속 객체 (Dependent objects). 부모 객체가 존재하는 객체 타입

- G : 부여된 객체 (Granted objects). 권한과 관련된 객체 타입

  • 반환값

내부에서 정의된 쓰기 전용 handle(CONVERT의 파라미터로 사용됨)

  • 예외 상황

예외 상황
설명

INVALID_ARGVAL

잘못된 파라미터가 입력됨

INVALID_OPERATION

FETCH_DDL, FETCH_XML 수행 후에는 호출할 수 없음

  • 예제

SET_FILTER

대상 객체를 특정할 수 있는 필터를 설정합니다.

SET_FILTER 함수의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

handle

OPEN 또는 OPENW 함수를 통해 획득한 handle

name

  • 필터 이름("[객체 타입]" 참고).

  • 각 필터의 값의 타입에 맞는 프로시저를 사용해야함

value

필터 값

object_type_path

현재 사용 불가

[객체 타입]

아래 표는 필터 이름과 대응하는 객체 타입을 표시합니다.

객체 타입 유형
필터 이름
타입
설명

S

SCHEMA

Varchar2

스키마 이름 (PUBLIC도 사용 가능)

N

NAME

Varchar2

객체 이름

N

NAME_EXPR

Varchar2

  • 객체 이름과 관련된 expression

  • 객체 특정 시 WHERE 절에 사용

D

BASE_OBJECT_NAME

Varchar2

부모 객체 이름

D

BASE_OB JECT_SCHEMA

Varchar2

부모 객체의 스키마 이름

D

BASE_OB JECT_NAME_EXPR

Varchar2

  • 부모 객체 이름과 관련된 expression

  • 부모 객체 특정 시 WHERE 절에 사 용됨

D

BASE_OBJECT_TYPE

Varchar2

부모 객체 타입

INDEX, TRIGGER

SYSTEM_GENERATED

Boolean

  • TRUE이면 시스템이 생성한 인덱스/ 트리거를 포함

  • FALSE이면 생략 (기본값 : TRUE)

G

GRANTEE

Varchar2

수혜자 이름

  • 예외 상황

예외 상황
설명

INVALID_ARGVAL

handle이 NULL이거나 invalid

INVALID_OPERATION

FETCH_DDL, FETCH_XML 수행 후에는 호출할 수 없음

INCONSISTENT_ARGS

handle 생성 시 입력된 object_type 파라미터와 대응하지 않는 필터를 설정하려 함

  • 예제

SET_PARSE_ITEM

추출된 XML 문서에서 별도로 추출하고자 하는 정보를 설정합니다.

SET_PARSE_ITEM 함수의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

handle

OPEN 또는 OPENW 함수를 통해 획득한 handle

name

Parse item 이름("[객체 타입]" 참고)

object_type

객체 타입

[객체 타입]

아래 표는 Parse item 이름과 대응하는 객체 타입 종류를 표시합니다.

객체 타입 유형
Parse item 이름
설명

모든 객체 (SNDG)

VERB

DDL 구문의 동사 (CREATE, GRANT 등)

모든 객체(SNDG)

OBJECT_TYPE

DDL 구문의 객체 타입 (TABLE, INDEX 등)

N

NAME

DDL 구문의 객체 이름

G

GRANTEE

DDL 구문의 수혜자 이름

  • 예외 상황

예외 상황
설명

INVALID_ARGVAL

handle이 NULL이거나 invalid

INVALID_OPERATION

FETCH_DDL, FETCH_XML 수행 후에는 호출할 수 없음

INCONSISTENT_ARGS

handle 생성 시 입력된 object_type 파라미터와 대응하지 않는 Parse item을 설정하려 함

  • 예제

SET_REMAP_PARAM

추출된 XML 문서 중 특정 값을 변경할 때 사용하는 파라미터를 설정합니다.

SET_REMAP_PARAM 함수의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

transform_handle

  • ADD_TRANSFORM 함수를 통해 획득한 transform handle

  • 'MODIFY' transform만 사용 가능

name

파라미터 이름("[객체 타입]" 참고).

old_value

변경 대상이 되는 값

new_value

변경 하고자 하는 값

object_type

현재 사용 불가

[객체 타입]

아래 표는 파라미터 이름과 대응하는 객체 타입을 표시합니다.

객체 타입 유형
파라미터 이름
설명

N

부모 객체가 이름이 있는 객체인 종속 객체

REMAP_NAME

  • 객체 이름을 변경

  • 종속 객체의 경우 부모 객체의 이름을 변경

SDG

User

REMAP_SCHEMA

  • 스키마 이름을 변경

  • 종속 객체의 경우 부모 객체의 스키마를 변경

  • 부여된 객체의 경우 수혜자 이름을 변경

  • 예외 상황

예외 상황
설명

INVALID_ARGVAL

transform handle이 NULL이거나 invalid

INVALID_OPERATION

FETCH_DDL, FETCH_XML 수행 후에는 호출할 수 없음

INCONSISTENT_ARGS

handle 생성 시 입력된 object_type 파라미터와 대응하지 않는 파라미터를 설정하려 함

  • 예제

SET_TRANSFORM_PARAM

추출된 DDL의 형태를 결정하는 파라미터를 설정합니다.

SET_TRANSFORM_PARAM 함수의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

transform_handle

  • ADD_TRANSFORM 함수를 통해 획득한 transform handle

  • 'DDL' transform만 사용 가능

  • SESSION_TRANSFORM은 해당 세션에서 기본적으로 사용하는 DDL transform을 의미

  • SESSION_TRANSFORM은 DBMS_METADATA 패 키지에 정의되어 있음

  • GET_DDL 등의 함수에서도 사용

name

  • 파라미터 이름("[객체 타입]" 참고).

  • 각 파라미터값의 타입에 맞는 프러시저를 사용해야 함

value

파라미터 값

object_type

현재 사용 불가

[객체 타입]

아래 표는 파라미터 이름과 대응하는 객체 타입 및 파라미터 값의 타입을 표시합니다.

객체 타입 유형
파라미터 이름
타입
설명

모든 객체 (SNDG)

PRETTY

Boolean

TRUE이면 DDL 추출 시 들여쓰기와 줄바꿈이 추가 됨 (기본값 : TRUE)

모든 객체 (SNDG)

SQLTERMINATOR

Boolean

TRUE이면 DDL 추출 시 종결부호(;) 포함 (기본값 : FALSE)

TABLE

CONSTRAINTS

Boolean

TRUE이면 TABLE 추출 시 참조 무결성 제약조건을 제외한 모든 제약조건 포함 (기본값 : TRUE)

TABLE

REF_CONSTRAINTS

Boolean

TRUE이면 TABLE 추출 시 참조 무결성 제약조건을 포함

(기본값 : TRUE)

TABLE

CONSTRAINTS_AS_AL TER

Boolean

  • TRUE이면 TABLE 추출 시 제약조건을 CREATE TABLE 구문에 포함시키지 않고 별도의 ALTER TABLE 구문으로 제공

  • FALSE이면 TABLE 추출 시 제약조건을 CREATE TABLE 구문에 포함시킴

  • TRUE 설정을 위해선 CON STRAINTS 파라미터가 TRUE로 설정되어 있어야 함

(기본값 : FALSE)

객체 타입 유형
파라미터 이름
타입
설명

TABLE

TABLE_COMPRES SION_CLAUSE

Varchar2

  • TABLE 추출 시 compression clause를 지정할 수 있음

  • NONE 설정 시 compression clause를 생략(소속 테이블스페이스의 설정에 따름)

INDEX CONSTRAINT TABLE TABLESPACE

SEGMENT_AT TRIBUTES

Boolean

  • TRUE이면 DDL 추출 시 segment at tribute clause를 포함

(기본값 : TRUE)

INDEX CONSTRAINT TABLE

STORAGE

Boolean

  • TRUE이면 DDL 추출 시 storage clause를 포함

  • SEGMENT_ATTRIBUTES 파라미터가 FALSE이면 해당 파라미터는 무시 (기본값 : TRUE)

INDEX CONSTRAINT TABLE

TABLESPACE

Boolean

  • TRUE이면 DDL 추출 시 tablespace clause를 포함

  • SEGMENT_ATTRIBUTES 파라미터가 FALSE이면 해당 파라미터는 무시 됨 (기본값 : TRUE)

  • 예외 상황

예외 상황
설명

INVALID_ARGVAL

transform handle이 NULL이거나 invalid

INVALID_OPERATION

FETCH_DDL, FETCH_XML 수행 후에는 호출할 수 없음

INCONSISTENT_ARGS

handle 생성 시 입력된 object_type 파라미터와 대응하지 않는 파라미터를 설정하려 함

  • 예제

Last updated