oracle dbms_metadata 獲取ddl語句
直接查詢
SQL> select dbms_metadata.get_ddl('TABLE','EMP','SCOTT') from dual; DBMS_METADATA.GET_DDL('TABLE','EMP','SCOTT') -------------------------------------------------------------------------------- CREATE TABLE "SCOTT"."EMP" ( "EMPNO" NUMBER(4,0), "ENAME" VARCHAR2(10), SQL> |
此時會發現使輸出的結果不全,這是因為sqlplus 預設輸出的lob長度為80,做如下設定後查詢
SQL> set pagesize 1000 SQL> set long 8000 SQL> select dbms_metadata.get_ddl('TABLE','EMP','SCOTT') from dual; DBMS_METADATA.GET_DDL('TABLE','EMP','SCOTT') --------------------------------------------------------------------------------
CREATE TABLE "SCOTT"."EMP" ( "EMPNO" NUMBER(4,0), "ENAME" VARCHAR2(10), "JOB" VARCHAR2(9), "MGR" NUMBER(4,0), "HIREDATE" DATE, "SAL" NUMBER(7,2), "COMM" NUMBER(7,2), "DEPTNO" NUMBER(2,0), CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO") USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "USERS" ENABLE, CONSTRAINT "FK_DEPTNO" FOREIGN KEY ("DEPTNO") REFERENCES "SCOTT"."DEPT" ("DEPTNO") ENABLE ) 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) TABLESPACE "USERS"
|
此時可以發現表所有相關屬性全部列出;
但是某些時候,並不需要顯示的這麼全,所以可以有選擇性的進行格式化輸出:
不顯示儲存屬性等:
SQL> execute dbms_metadata.set_transform_param(dbms_metadata.session_transform,'SEGMENT_ATTRIBUTES', false); PL/SQL procedure successfully completed. SQL> select dbms_metadata.get_ddl('TABLE','EMP','SCOTT') from dual; DBMS_METADATA.GET_DDL('TABLE','EMP','SCOTT') --------------------------------------------------------------------------------
CREATE TABLE "SCOTT"."EMP" ( "EMPNO" NUMBER(4,0), "ENAME" VARCHAR2(10), "JOB" VARCHAR2(9), "MGR" NUMBER(4,0), "HIREDATE" DATE, "SAL" NUMBER(7,2), "COMM" NUMBER(7,2), "DEPTNO" NUMBER(2,0), CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO") ENABLE, CONSTRAINT "FK_DEPTNO" FOREIGN KEY ("DEPTNO") REFERENCES "SCOTT"."DEPT" ("DEPTNO") ENABLE ) |
格式化輸出,不顯示約束等:
SQL> execute dbms_metadata.set_transform_param(dbms_metadata.session_transform,'CONSTRAINTS', FALSE) PL/SQL procedure successfully completed. SQL> execute dbms_metadata.set_transform_param(dbms_metadata.session_transform,'REF_CONSTRAINTS', FALSE) PL/SQL procedure successfully completed. SQL> execute dbms_metadata.set_transform_param(dbms_metadata.session_transform,'SQLTERMINATOR', TRUE) PL/SQL procedure successfully completed. SQL> select dbms_metadata.get_ddl('TABLE','EMP','SCOTT') from dual; DBMS_METADATA.GET_DDL('TABLE','EMP','SCOTT') -------------------------------------------------------------------------------- CREATE TABLE "SCOTT"."EMP" ( "EMPNO" NUMBER(4,0), "ENAME" VARCHAR2(10), "JOB" VARCHAR2(9), "MGR" NUMBER(4,0), "HIREDATE" DATE, "SAL" NUMBER(7,2), "COMM" NUMBER(7,2), "DEPTNO" NUMBER(2,0) ) ; SQL> |
最簡單的方式:
SQL> execute dbms_metadata.set_transform_param(dbms_metadata.session_transform,'PRETTY', FALSE) PL/SQL procedure successfully completed. SQL> select dbms_metadata.get_ddl('TABLE','EMP','SCOTT') from dual; DBMS_METADATA.GET_DDL('TABLE','EMP','SCOTT') -------------------------------------------------------------------------------- CREATE TABLE "SCOTT"."EMP" ("EMPNO" NUMBER(4,0), "ENAME" VARCHAR2(10), "JOB" V ARCHAR2(9), "MGR" NUMBER(4,0), "HIREDATE" DATE, "SAL" NUMBER(7,2), "COMM" NUMBER (7,2), "DEPTNO" NUMBER(2,0)) ; |
同時需要了解表所在使用者擁有的許可權,以便能夠正常的使用表:
SQL> SELECT DBMS_METADATA.GET_GRANTED_DDL('ROLE_GRANT','SCOTT') FROM DUAL;
DBMS_METADATA.GET_GRANTED_DDL('ROLE_GRANT','SCOTT') -------------------------------------------------------------------------------- GRANT "CONNECT" TO "SCOTT"; GRANT "RESOURCE" TO "SCOTT"; SQL> |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25656398/viewspace-704837/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 獲取ddl語句Oracle
- DBMS_METADATA包獲得物件DDL語句物件
- oracle之 獲取建表ddl語句Oracle
- Oracle中獲取TABLE的DDL語句的方法Oracle
- 獲取物件DDL語句的方法物件
- 用dbms_metadata.get_ddl獲取ddl語句
- 搬運工,oracle獲得ddl語句Oracle
- 通過dblink獲取遠端DDL語句
- oracle獲取ddl指令碼Oracle指令碼
- 如何獲取expdp出來的dmp檔案中的DDL語句
- oracle檢視建立物件的DDL語句Oracle物件
- Oracle利用dbms_metadata.get_ddl檢視DDL語句Oracle
- Oracle 儲存過程中的DDL語句Oracle儲存過程
- Oracle獲取資料庫中的物件建立語句Oracle資料庫物件
- 通過DBMS_METADATA.GET_DDL包獲得相關物件ddl語句物件
- PL/SQL與DDL語句SQL
- Oracle從dump檔案中提取DDL語句方法Oracle
- 執行oracle DDL語句要注意的問題Oracle
- 獲取物件的構建語句物件
- 獲取oracle sql語句詳細些執行計劃OracleSQL
- Oracle中獲取最低效的 topSQL的語句 (引用)OracleSQL
- oracle使用dbms_metadata.get_ddl包檢視DDL語句定義Oracle
- 獲取建tablespace sql ddlSQL
- Laravel 獲取執行的sql語句LaravelSQL
- 觸發器中獲取SQL語句觸發器SQL
- 獲取oracle正在處於等待狀態的sql語句的執行計劃的語句OracleSQL
- dbms_metadata.get_ddl()來獲得物件的定義語句物件
- 利用dbms_metadata.get_ddl檢視DDL語句
- 再論執行oracle DDL語句要注意的問題Oracle
- Oracle 從Dump 檔案裡提取 DDL 語句 方法說明Oracle
- PostgreSQL 函式獲取表DDLSQL函式
- Mysql 獲取表設計查詢語句MySql
- ORACLE不使用工具的情況下獲取物件DDLOracle物件
- DBMS_METADATE.GET_DDL獲取物件DDL指令碼物件指令碼
- PostgreSQL獲取建表語句儲存過程SQL儲存過程
- 6.3. 基本SQL語句——6.3.1. DDLSQL
- 使用資料泵匯出DDL語句
- Oracle 不知使用者的密碼時,如何獲取dblink建立語句Oracle密碼