DBMS METADATA
DBMS_METADATA#
DBMS_METADATA 패키지는 데이터베이스 딕셔너리로부터 객체 생성 DDL 구문 또는 권한 GRANT 구문을 추출하는 기능을 제공한다. 아래는 DBMS_METADATA 패키지를 구성하는 프로시저와 함수를 정리한 표이다.
| 프로시저 및 함수 | 설명 | 
|---|---|
| GET_DDL | 지정한 객체에 대한 DDL 구문 반환 | 
| GET_DEPENDENT_DDL | 지정한 객체에 종속된 객체들의 DDL 구문 반환 | 
| GET_GRANTED_DDL | 지정한 사용자에게 부여된 권한들에 대한 GRANT 구문 반환 | 
| SET_TRANSFORM_PARAM | 반환되는 DDL 문 내의 특정 항목들의 포함 여부 설정 | 
| SHOW_TRANSFORM_PARAMS | 현재 설정된 transform parameter 값 출력 | 
GET_DDL#
지정한 객체에 대한 생성 DDL 구문을 반환한다.
구문#
DBMS_METADATA.GET_DDL (
   object_type     IN VARCHAR(20),
   object_name     IN VARCHAR(128),
   schema          IN VARCHAR(128) DEFAULT NULL)
RETURN VARCHAR(65534);
파라미터#
| 이름 | 입출력 | 데이터 타입 | 설명 | 
|---|---|---|---|
| object_type | IN | VARCHAR(20) | 객체 종류 | 
| object_name | IN | VARCHAR(128) | 객체 이름 (대소문자 구분) | 
| schema | IN | VARCHAR(128) | 객체 소유자 (대소문자 구분). object_type이 스키마 객체이면 기본값은 현재 접속한 사용자이고, 비스키마 객체이면 기본값은 NULL이다.  | 
object_type#
스키마 객체
- CONSTRAINT
 - DB_LINK
 - FUNCTION
 - INDEX
 - LIBRARY
 - MATERIALIZED_VIEW
 - PACKAGE
 - PACKAGE_SPEC
 - PACKAGE_BODY
 - PROCEDURE
 - QUEUE
 - REF_CONSTRAINT
 - SEQUENCE
 - SYNONYM
 - TABLE
 - TRIGGER
 - TYPESET
 - VIEW
 
비스키마 객체
- DIRECTORY
 - JOB
 - REPLICATION
 - ROLE
 - TABLESPACE: 메모리 시스템 테이블스페이스는 DDL문이 반환되지 않고, 디스크 시스템 테이블스페이스는 ALTER 구문이 반환된다.
 - USER
 
결과값#
DDL 구문
예외#
invalid_argval not_supported_obj_type schema_not_found object_not_found not_supported_ddl
예제#
접속 사용자가 소유한 모든 테이블의 생성 DDL 구문을 구하는 예제이다.
set vertical on;
SELECT TO_CHAR(dbms_metadata.get_ddl('TABLE', table_name, null)) as ddl
FROM system_.sys_tables_
WHERE table_type = 'T' AND user_id = user_id()
ORDER BY table_name;
GET_DEPENDENT_DDL#
지정한 객체에 종속된 객체들의 생성 DDL 구문을 반환한다.
구문#
DBMS_METADATA.GET_DEPENDENT_DDL (
   object_type          IN VARCHAR(20),
   base_object_name     IN VARCHAR(128),
   base_object_schema   IN VARCHAR(128) DEFAULT NULL)
RETURN VARCHAR(65534);
파라미터#
| 이름 | 입출력 | 데이터 타입 | 설명 | 
|---|---|---|---|
| object_type | IN | VARCHAR(20) | 객체 종류 | 
| base_object_name | IN | VARCHAR(128) | 베이스 객체 이름 (대소문자 구분) | 
| base_object_schema | IN | VARCHAR(128) | 베이스 객체 소유자 (대소문자 구분). 기본값은 현재 접속한 사용자이다.  | 
object_type#
- COMMENT
 - CONSTRAINT
 - INDEX
 - OBJECT_GRANT
 - REF_CONSTRAINT
 - TRIGGER
 
결과값#
DDL 구문
예외#
invalid_argval not_supported_obj_type schema_not_found object_not_found
예제#
접속 사용자의 T1 테이블에 대한 모든 객체 권한을 구하는 예제이다.
set vertical on;
SELECT TO_CHAR(dbms_metadata.get_dependent_ddl('OBJECT_GRANT', 'T1')) as ddl
FROM dual;
GET_GRANTED_DDL#
지정한 사용자에게 부여된 권한들의 생성 DDL 구문을 반환한다.
구문#
DBMS_METADATA.GET_GRANTED_DDL (
   object_type          IN VARCHAR(20),
   grantee              IN VARCHAR(128) DEFAULT NULL)
RETURN VARCHAR(65534);
파라미터#
| 이름 | 입출력 | 데이터 타입 | 설명 | 
|---|---|---|---|
| object_type | IN | VARCHAR(20) | 객체 종류 | 
| grantee | IN | VARCHAR(128) | grantee (대소문자 구분). 기본값은 현재 접속한 사용자이다.  | 
object_type#
- OBJECT_GRANT
 - ROLE_GRANT
 - SYSTEM_GRANT
 
결과값#
DDL 구문
예외#
invalid_argval not_supported_obj_type grantee_not_found object_not_found
예제#
USER1 사용자에 부여된 모든 시스템 권한을 구하는 예제이다.
set vertical on;
SELECT TO_CHAR(dbms_metadata.get_granted_ddl('SYSTEM_GRANT', 'USER1')) as ddl
FROM dual;
SET_TRANSFORM_PARAM#
반환되는 DDL 문 내의 특정 항목들의 포함 여부를 설정한다. 파라미터 설정은 같은 세션 내에서만 적용된다.
구문#
DBMS_METADATA.SET_TRANSFORM_PARAM (
   name          IN VARCHAR(40),
   value         IN CHAR(1));
파라미터#
| 이름 | 입출력 | 데이터 타입 | 설명 | 
|---|---|---|---|
| name | IN | VARCHAR(40) | 파라미터 이름 | 
| value | IN | CHAR(1) | 값 | 
객체 종류별 적용되는 파라미터#
| Object Type | Name | Description | Default | 
|---|---|---|---|
| 모든 객체 | SQLTERMINATOR | DDL 문에 SQL 종결자(terminator)를 덧붙일지 여부를 지정한다. T: SQL 종결자를 덧붙임 F: SQL 종결자를 덧붙이지 않음  | 
F | 
| TABLE INDEX CONSTRAINT  | 
SEGMENT_ATTRIBUTES | segment attributes (physical attributes, storage clause, tablespace, logging) 포함 여부를 지정한다. T: 포함 F: 미포함  | 
T | 
| STORAGE | storage clause 포함 여부를 지정한다. T: 포함 F: 미포함  | 
T | |
| TABLESPACE | tablespace 포함 여부를 지정한다. T: 포함 F: 미포함  | 
T | |
| TABLE | CONSTRAINTS | foreign key를 제외한 constraint(primary key, unique, check)의 포함 여부를 지정한다. T: 포함 F: 미포함  | 
T | 
| REF_CONSTRAINTS | foreign key 포함 여부를 지정한다. T: 포함 F: 미포함  | 
결과값#
없음
예외#
invalid_argval
예제#
반환되는 DDL문에 SQL 종결자를 덧붙이도록 설정하는 예제이다.
exec dbms_metadata.set_transform_param('SQLTERMINATOR', 'T');
SHOW_TRANSFORM_PARAMS#
현재 설정된 transform parameter 값을 출력한다.
구문#
DBMS_METADATA.SHOW_TRANSFORM_PARAMS;
결과값#
없음
예외#
예외를 발생시키지 않는다.