Oracle

게시글 보기
작성자 유건데이타 등록일 2015-08-29
제목 ddl 뽑기
생성된 OBJECT 들의 DDL 문 GENERATE 방법(DBMS_METADATA)
==================================================



PURPOSE
-------
다음은 생성된 Object 들의 DDL 문을 Generate 하는 방법에 대해 소개한다.


Explanation
-----------
이는 9i 의 새로운 기능으로 DBMS_METADATA package 를 이용한다.
먼저 view 를 생성하기 위해 $ORACLE_HOME/rdbms/admin/catmeta.sql
script 를 sys user 로 실행한다.

DBMS_METADATA pacakge 는 schema object 의 완전한 definition 을 얻기
위한 강력한 tool 로서 한번에 object 의 모든 attributes 를 얻을 수
있다.


Example
-------
예1. Table 에 대한 script 를 generate 한다.

예로 먼저 Table 을 생성해 보자.
SQL> create table idx3_tab (
name varchar2(30),
id number,
addr varchar2(100),
phone varchar2(30)) tablespace users;

Table created.

위의 Table 생성 Script 를 원한다면 다음의 문을 실행한다.
SQL> select dbms_metadata.get_ddl('TABLE','IDX3_TAB') from dual;

DBMS_METADATA.GET_DDL('TABLE','IDX3_TAB')
---------------------------------------------------------
CREATE TABLE "SCOTT"."IDX3_TAB"
( "NAME" VARCHAR2(30),
"ID" NUMBER,
"ADDR" VARCHAR2(100),
"PHONE" VARCHAR2(30)
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1
MAXEXTENTS 2147483645 PCTINCREASE 0
FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "USERS"

단, 위는 long type 을 return 하므로 위의 script 가 잘린다면
SQL> set long [n]
n: 1 through 2000000000
을 먼저 실행한다.

그리고 위의 script 에서 storage 절을 없이 원한다면
다음의 procedure 를 먼저 실행한다.
SQL> EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,
'STORAGE',false);

PL/SQL procedure successfully completed.

이제 다시 처음의 구문을 실행한다.
SQL> select dbms_metadata.get_ddl('TABLE','IDX3_TAB') from dual;

DBMS_METADATA.GET_DDL('TABLE','IDX3_TAB')
---------------------------------------------------------------
CREATE TABLE "SCOTT"."IDX3_TAB"
( "NAME" VARCHAR2(30),
"ID" NUMBER,
"ADDR" VARCHAR2(100),
"PHONE" VARCHAR2(30)
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 LOGGING TABLESPACE "USERS"

예2. Object type 을 가진 table 의 script.

SQL> create type person as object (
name varchar2(20),
age number);
/

Type created.

SQL> create type v0 as varray(5) of person;
/

Type created.

SQL> create type n1 as table of v0;
/

Type created.

SQL> create type n2 as object (n2_c1 n1);
/

Type created.

SQL> create table tab11 (
c1 n2)
nested table c1.n2_c1 store as tab11_c1_n1 (
varray column_value store as lob tab11_c1_v1)
RETURN AS LOCATOR;

Table created.

SQL> create table tab11 (
c1 n2)
nested table c1.n2_c1 store as tab11_c1_n1 (
varray column_value store as lob tab11_c1_v1)
RETURN AS LOCATOR;

Table created.

SQL> select dbms_metadata.get_ddl('TABLE','TAB11') from dual;

CREATE TABLE "SCOTT"."TAB11"
( "C1" "SCOTT"."N2"
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 LOGGING
STORAGE(INITIAL 16384 NEXT 16384 MINEXTENTS 1 MAXEXTENTS 505 PCTINCREASE 50
FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "SYSTEM"
NESTED TABLE "C1"."N2_C1" STORE AS "TAB11_C1_N1"
(PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 LOGGING
STORAGE(INITIAL 16384 NEXT 16384 MINEXTENTS 1 MAXEXTENTS 505 PCTINCREASE 50
FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
VARRAY "COLUMN_VALUE" STORE AS LOB "TAB11_C1_V1"
(ENABLE STORAGE IN ROW CHUNK 8192 PCTVERSION 10
CACHE
STORAGE(INITIAL 16384 NEXT 16384 MINEXTENTS 1 MAXEXTENTS 505 PCTINCREASE 50
FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT))) RETURN AS LOCATOR


출처 : otn.oracle.com
Comment
등록된 코멘트가 없습니다.