Oracle
以自動化方式編寫 Oracle DDL
Oracle SQL Developer 可以通過
Tools -> Database Export...
This 很好的導出DDL,但是需要人工干預。我知道
DBMS_METADATA.get_ddl()
,但發現出口並不完美。我遇到了導出的DBMS_METADATA
DDL 無法使用的問題,如果沒有首先修復關鍵字中間的中斷等問題,甚至更糟。但是,如果有人知道一種DMBS_METADATA
無需手動修復即可執行的導出 DDL 的方法,那也是一個很好的解決方案。基本上,我正在尋找一種自動/可編寫腳本的方式來導出與通過手動方式導出的內容相同的 DDL。
我怎樣才能做到這一點?
好吧,如果 sqlplus 搞砸了您的 dbms_metadata.get_ddl 輸出,為什麼不選擇 CLOB 中的輸出並將 CLOB 寫入文件系統。
例如
DECLARE data CLOB; objType varchar2(30) := 'TABLE'; objSchema varchar2(30) := 'SCOTT'; objName varchar2(30) := 'EMP'; fname varchar2(256) := objType || '_' || objSchema || '_' || objName || '.sql'; BEGIN SELECT dbms_metadata.get_ddl(objType,objName,objSchema) into data from dual; DBMS_XSLPROCESSOR.CLOB2FILE(data,'DATA_PUMP_DIR',fname); END; /
這應該可以讓您獲得正確的 DDL,而不會導致輸出混亂。唯一的事情是腳本將在數據庫伺服器上創建,而不是在您呼叫 sqlplus 的客戶端上。
該腳本保存在數據庫伺服器上的“DATA_PUPM_DIR”條目指向的目錄中。IE
select directory_path from all_directories where directory_name like 'DATA_PUMP_DIR';
更重要的是,您可以在模式的所有表/索引等上添加某種迭代,並立即獲得完整的模式 DDL。我一直都這樣做。