9i 前取得 DDL 僅能 EXP ROWS=N (格式難用) 或寫複雜字典查詢腳本 (IOT、巢狀表等複雜物件查不到)。9i 引入 DBMS_METADATA 套件,一行指令即可從字典精準提取單一物件或整個 Schema 的完整 DDL。
SET HEADING OFF ECHO OFF PAGES 999 LONG 90000
SPOOL get_single.sql
SELECT DBMS_METADATA.GET_DDL('TABLE', 'SZT_PQSO2', 'SHQSYS') FROM DUAL;
SELECT DBMS_METADATA.GET_DDL('INDEX', 'INDXX_PQZJYW', 'SHQSYS') FROM DUAL;
SPOOL OFF
輸出即標準 CREATE TABLE/INDEX 陳述式,加分號即可直接執行。
SET PAGESIZE 0 LONG 90000 FEEDBACK OFF ECHO OFF
SPOOL get_schema.sql
CONNECT shqsys/shqsys@hawk1;
SELECT DBMS_METADATA.GET_DDL('TABLE', u.table_name) FROM USER_TABLES u;
SELECT DBMS_METADATA.GET_DDL('INDEX', u.index_name) FROM USER_INDEXES u;
SPOOL OFF
若有外鍵參考約束,需依相依順序重建。可查 DBA_CONSTRAINTS、DBA_CONS_COLUMNS 判斷表建立順序。