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;
결과값#
없음
예외#
예외를 발생시키지 않는다.