dbms_metadata.get_ddl的使用
对于这个函数我觉得有以下几个方面的用处。
1、想要详细的了解一个对象的属性。
2、获得对象创建的DDL语句,用于对象的重建或者重用其中的一部分。
SQL> set linesize 300--设置sqlplus 中输出的宽度为足够宽,以免输出换行。
SQL> set long 100000--dbms_metadata.get_ddl 函数返回的类型是clob,所以设置long为足够大。
SQL> set pagesize 0--禁用分页。
SQL> select dbms_metadata.get_ddl('TABLE','T','HR') from dual;
CREATE TABLE "HR"."T"
( "EMPLOYEE_ID" NUMBER(6,0),
"FIRST_NAME" VARCHAR2(20),
"LAST_NAME" VARCHAR2(25) NOT NULL ENABLE,
"EMAIL" VARCHAR2(25) NOT NULL ENABLE,
"PHONE_NUMBER" VARCHAR2(20),
"HIRE_DATE" DATE NOT NULL ENABLE,
"JOB_ID" VARCHAR2(10) NOT NULL ENABLE,
"SALARY" NUMBER(8,2),
"COMMISSION_PCT" NUMBER(2,2),
"MANAGER_ID" NUMBER(6,0),
"DEPARTMENT_ID" NUMBER(4,0)
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS"
dbms_metadata.get_ddl 常用的有三个参数,object_type 指定对象类型,name 指定对象名称,schema 指定对象所在的schema,默认是当前用户。dbms_metadata.get_ddl 的输出是可以直接使用的,比如先把表 t 删除。
SQL> drop table t;
Table dropped.
使用刚才 dbms_metadata.get_ddl 的输出,重建表t。
SQL> ed
Wrote file afiedt.buf
1 CREATE TABLE "HR"."T"
2 ( "EMPLOYEE_ID" NUMBER(6,0),
3 "FIRST_NAME" VARCHAR2(20),
4 "LAST_NAME" VARCHAR2(25) NOT NULL ENABLE,
5 "EMAIL" VARCHAR2(25) NOT NULL ENABLE,
6 "PHONE_NUMBER" VARCHAR2(20),
7 "HIRE_DATE" DATE NOT NULL ENABLE,
8 "JOB_ID" VARCHAR2(10) NOT NULL ENABLE,
9 "SALARY" NUMBER(8,2),
10 "COMMISSION_PCT" NUMBER(2,2),
11 "MANAGER_ID" NUMBER(6,0),
12 "DEPARTMENT_ID" NUMBER(4,0)
13 ) SEGMENT CREATION IMMEDIATE
14 PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
15 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
16* PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "USERS"
SQL> /
Table created.
注:为了更加方便的保存dbms_metadata.get_ddl 的输出,可以使用spool。