dbms_metadata.get_ddl獲取對象定義腳本

在工作中我們會遇到從數據庫中獲取某些對象的定義腳本,比如:

PROCEDURE

PACKAGE

PACKAGE BODY

TRIGGER

FUNCTION

TABLE等。

這裏就教大家一招獲取指定對象的定義語句的方法。

獲取HR用戶下employees表的結構:

1.查看employees表中有哪些字段:

 

SQL>desc employees;
 名稱                                    是否爲空? 類型
 ------------------------------------------------- ----------------------------
 EMPLOYEE_ID                     NOT NULL NUMBER(6)
 FIRST_NAME                            VARCHAR2(20)
 LAST_NAME                      NOT NULL VARCHAR2(25)
 EMAIL                         NOT NULL VARCHAR2(25)
 PHONE_NUMBER                          VARCHAR2(20)
 HIRE_DATE                      NOT NULL DATE
 JOB_ID                        NOT NULL VARCHAR2(10)
 SALARY                              NUMBER(8,2)
 COMMISSION_PCT                         NUMBER(2,2)
 MANAGER_ID                            NUMBER(6)
 DEPARTMENT_ID                          NUMBER(4)

嘗試獲取建表語句:

執行效果如下:

SQL> selectDBMS_METADATA.get_ddl('TABLE','EMPLOYEES','HR') from dual;
 
DBMS_METADATA.GET_DDL('TABLE','EMPLOYEES','HR')
--------------------------------------------------------------------------------
 
 CREATE TABLE "HR"."EMPLOYEES"
  (    "EMPLOYEE_ID"NUMBER(6,0),
       "FIRST_NAME"
 
 
SQL>

發現顯示的不完整,看看配置參數;

SQL> show long
long 80
SQL> set long 9999

重新執行語句

SQL>select DBMS_METADATA.get_ddl('TABLE','EMPLOYEES','HR') from dual;
 
DBMS_METADATA.GET_DDL('TABLE','EMPLOYEES','HR')
--------------------------------------------------------------------------------
 
  CREATE TABLE"HR"."EMPLOYEES"
   (   "EMPLOYEE_ID" NUMBER(6,0),
        "FIRST_NAME" VARCHAR2(20),
        "LAST_NAME" VARCHAR2(25)CONSTRAINT "EMP_LA
ST_NAME_NN"NOT NULL ENABLE,
        "EMAIL" VARCHAR2(25)CONSTRAINT "EMP_EMAIL_NN" NO
T NULLENABLE,
        "PHONE_NUMBER" VARCHAR2(20),
        "HIRE_DATE" DATE CONSTRAINT"EMP_HIRE_DATE_NN" NOT N
ULL ENABLE,
 
DBMS_METADATA.GET_DDL('TABLE','EMPLOYEES','HR')
--------------------------------------------------------------------------------
        "JOB_ID" VARCHAR2(10)CONSTRAINT "EMP_JOB_NN"
NOT NULLENABLE,
        "SALARY" NUMBER(8,2),
        "COMMISSION_PCT" NUMBER(2,2),
        "MANAGER_ID" NUMBER(6,0),
        "DEPARTMENT_ID" NUMBER(4,0),
         CONSTRAINT "EMP_SALARY_MIN"CHECK (salary > 0
) ENABLE,
         CONSTRAINT "EMP_EMAIL_UK"UNIQUE ("EMAIL")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS
 255 NOLOGGING COMPUTE STATISTICS
 
DBMS_METADATA.GET_DDL('TABLE','EMPLOYEES','HR')
--------------------------------------------------------------------------------
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTEN
TS 1MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1BUFFER_
POOLDEFAULT FLASH_CACHE DEFAULT CELL_FL
ASH_CACHEDEFAULT)
  TABLESPACE "EXAMPLE"  ENABLE,
         CONSTRAINT "EMP_EMP_ID_PK"PRIMARY KEY ("EMPLO
YEE_ID")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255NO
LOGGINGCOMPUTE STATISTICS
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS1 MA
 
DBMS_METADATA.GET_DDL('TABLE','EMPLOYEES','HR')
--------------------------------------------------------------------------------
XEXTENTS2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GRO
UPS 1BUFFER_POOL DEFAULT FLASH_CACHE DE
FAULTCELL_FLASH_CACHE DEFAULT)
  TABLESPACE "EXAMPLE"  ENABLE,
         CONSTRAINT "EMP_MANAGER_FK"FOREIGN KEY ("MANAGER_ID"
)
          REFERENCES"HR"."EMPLOYEES" ("EMPLOYEE_ID") ENABLE,
         CONSTRAINT "EMP_JOB_FK"FOREIGN KEY ("JO
B_ID")
          REFERENCES"HR"."JOBS" ("JOB_ID") ENABLE,
 
DBMS_METADATA.GET_DDL('TABLE','EMPLOYEES','HR')
--------------------------------------------------------------------------------
         CONSTRAINT "EMP_DEPT_FK"FOREIGN KEY ("DEPART
MENT_ID")
          REFERENCES"HR"."DEPARTMENTS" ("DEPARTMENT_ID")
 ENABLE
   ) SEGMENT CREATION IMMEDIATE
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255NOCOMPRESS
NOLOGGING

 

STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS1
MAXEXTENTS2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1BUFFER_POOL
DEFAULTFLASH_CACHE DEFAULT CELL_FLASH_C
 
DBMS_METADATA.GET_DDL('TABLE','EMPLOYEES','HR')
--------------------------------------------------------------------------------
ACHEDEFAULT)
  TABLESPACE "EXAMPLE"
 
 
 
SQL>

結果就是我們獲取的hr.employees的建表語句了。

除了表,dbms_metadate.get_ddl還可以獲取到觸發器,存儲過程等的信息。

諸如:

select dbms_metadata.get_ddl ('TRIGGER','ACCOUNT','TEST')from dual;

此語句的格式爲

select dbms_metadata.get_ddl (‘object_type’,’object_name’,’username’)from dual
;


 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章