Oracle

以自動化方式編寫 Oracle DDL

  • January 26, 2021

Oracle SQL Developer 可以通過Tools -> Database Export...This 很好的導出DDL,但是需要人工干預。

我知道DBMS_METADATA.get_ddl(),但發現出口並不完美。我遇到了導出的DBMS_METADATADDL 無法使用的問題,如果沒有首先修復關鍵字中間的中斷等問題,甚至更糟。但是,如果有人知道一種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。我一直都這樣做。

引用自:https://dba.stackexchange.com/questions/8392