雖然我都是用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;
所以找了一下不用工具而取得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;