用DBMS_METADATA.GET_DDL取得表格的DDL

雖然我都是用Toad、SQL Developer等工具來取得DDL,但是可能偶而會遇到沒有工具的時候。
所以找了一下不用工具而取得DDL的方法。

語法如下,會傳回Clob型態的值
DBMS_METADATA.GET_DDL (
object_type     IN VARCHAR2,
name            IN VARCHAR2,
schema          IN VARCHAR2 DEFAULT NULL,
version         IN VARCHAR2 DEFAULT 'COMPATIBLE',
model           IN VARCHAR2 DEFAULT 'ORACLE',
transform       IN VARCHAR2 DEFAULT 'DDL')
RETURN CLOB;

範例如下:

單一Table的DDL
set heading off;
set echo off;
Set pages 999;
set long 90000;
spool c:\ddl.txt
select dbms_metadata.get_ddl('TABLE','TMP_CCC','TEST_USER') from dual;
spool off;

取出當前使用者的整個Schmea的Table DDL
set pagesize 0
set long 90000
set feedback off
set echo off 
spool c:\schema.sql
SELECT DBMS_METADATA.GET_DDL('TABLE',u.table_name)
      FROM USER_TABLES u;
spool off;

取出所有的Tablespace的DDL
SELECT DBMS_METADATA.GET_DDL('TABLESPACE', TS.tablespace_name)
        FROM DBA_TABLESPACES TS;