dbms_metadata.get_ddl的使用

pingley發表於2012-05-21
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。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26110315/viewspace-730527/,如需轉載,請註明出處,否則將追究法律責任。