[Oracle] dbms_metadata.get_ddl 的使用方法總結

kunlunzhiying發表於2017-01-23

dbms_metadata.get_ddl()用於獲取物件的DDL,其具體用法如下。
注意:在sqlplus裡,為了更好的展示DDL,需要設定如下引數:
複製程式碼程式碼如下:

set line 200
set pagesize 0
set long 99999
set feedback off
set echo off

1)獲得表、索引、檢視、儲存過程、函式的DDL
複製程式碼程式碼如下:

select dbms_metadata.get_ddl('TABLE','TABLE_NAME','TABLE_OWNER') from dual;
select dbms_metadata.get_ddl('INDEX','INDEX_NAME','INDEX_OWNER') from dual;
select dbms_metadata.get_ddl('VIEW','VIEW_NAME','VIEW_OWNER') from dual;
select dbms_metadata.get_ddl('PROCEDURE','PROCEDURE_NAME','PROCEDURE_OWNER') from dual;
select dbms_metadata.get_ddl('FUNCTION','FUNCTION_NAME','FUNCTION_OWNER') from dual;

下面這個指令碼用於獲得某個schema下所有的表、索引、檢視、儲存過程、函式的DDL
複製程式碼程式碼如下:

set pagesize 0
set long 90000
set feedback off
set echo off
spool schema_ddl.sql
SELECT DBMS_METADATA.GET_DDL('TABLE',u.table_name,u.owner) FROM DBA_TABLES u;
SELECT DBMS_METADATA.GET_DDL('VIEW',u.view_name,u.owner) FROM DBA_VIEWS u;
SELECT DBMS_METADATA.GET_DDL('INDEX',u.index_name,u.owner) FROM DBA_INDEXES u;
select dbms_metadata.get_ddl('PROCEDURE',u.object_name, u.owner,) from dba_objects u where u.object_type = 'PROCEDURE';
select dbms_metadata.get_ddl('FUNCTION',u.object_name, u.owner,) from dba_objects u where u.object_type = 'FUNCTION';
spool off;

2)獲得表空間的DDL
獲得單個表空間的DDL:
複製程式碼程式碼如下:

select dbms_metadata.get_ddl('TABLESPACE','TBS_NAME') from dual;

獲得所有表空間的DDL: 
複製程式碼程式碼如下:

SELECT DBMS_METADATA.GET_DDL('TABLESPACE', TS.tablespace_name)
FROM DBA_TABLESPACES TS;

3)獲得使用者的DDL
獲得單個使用者的DDL:
複製程式碼程式碼如下:

select dbms_metadata.get_ddl('USER','EPAY_USER') from dual;

獲得所有使用者的DDL:
複製程式碼程式碼如下:

SELECT DBMS_METADATA.GET_DDL('USER',U.username) 
FROM DBA_USERS U;

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

相關文章