2009-11-30 64 views
5

我必須從Oracle中的某些表中生成PL/SQL中的XML文檔。我從來沒有這樣做過,而且我發現,似乎有這樣做的幾個主要途徑:從Oracle表中生成PL/SQL中的XML文檔

  • XMLDOM API
  • XML函數(如XMLELEMENT,XMLAGG,xmlroot)
  • DBMS_XMLGEN功能

有65個表將被引用來生成單個文檔,我將不得不根據xsd驗證輸出。這些文件將在一批(而不是按需)中生成 - 我不知道這是否有所作爲。使用Oracle 10g。

我最初傾向於使用xmldom包,因爲它看起來更加靈活,但我無法找到好的示例或文檔,而xml函數看起來更好記錄並且通常更受歡迎。是否有一個原因?

人們普遍推薦這種類型的任務是什麼?

回答

5

根據我的經驗,DBMS_XMLGEN適用於快速和骯髒的數據到XML轉換,但我從來沒有喜歡它,因爲您必須將SQL作爲字符串傳遞。此外,您對元素名稱和ROWSET/ROW結構的控制受到嚴重限制。

如果您處理的是相對簡單的結構,那麼XML函數非常方便,並且是我最喜歡的。例如,一旦進入多個XMLAgg級別,我發現它很快就會變成混亂的混亂。

XMLDOM是生成XML的最靈活的方法,特別是在結構更復雜或涉及迭代邏輯的情況下。這裏的主要缺點是它本質上是一個圍繞Java DOM的包裝器,其中大多數方法接受DOMNode輸入,但PL/SQL不直接支持多態,所以最終會在DOMElement和DOMNode之間進行大量顯式轉換,反之亦然等一般來說,我創建了自己的重載過程包來封裝所有這些,並使其工作時不那麼痛苦。

+0

與其他方法相比,XMLDOM的性能(特別是速度)如何?此代碼將生成分鐘。批量處理10k個文件。我知道這可能會讓人擔心perforance的優化,但如果現在選擇可能會對後續產生非常嚴重的影響,現在我寧願擔心它,而不必稍後重寫。 – FrustratedWithFormsDesigner 2009-11-30 22:22:45

+1

我從來沒有爲比較目的而衡量性能,但我懷疑這些情況中的主要因素是底層查詢而不是結果的XML化。 XMLDOM唯一的困難是我必須明確地調用freeDocument方法釋放你在完成該文檔後使用的內存。 – kurosch 2009-12-01 14:38:51

2

那麼,我從來沒有用Oracle來生成任何非常複雜的XML文檔,但使用DBMS_XMLDOC非常容易。

您可能會看到一個骷髏here(和here,只有pl/sql代碼)。同樣使用谷歌代碼搜索,當然還有更多可以找到的東西。
然後有DBMS_XMLDOM reference這有助於即使文檔相當乾燥。

確保你也看過這兩個職位:
http://www.liberidu.com/blog/?p=365
http://www.liberidu.com/blog/?p=369

或者你可以考慮使用生成Java存儲過程XML。

+0

我已經看到前兩個鏈接了,但DBMS_XMLDOM引用是新的。感謝您的鏈接! – FrustratedWithFormsDesigner 2009-11-30 22:05:29

2

我通常使用xml函數(XMLElementXMLForest等),因爲我可以控制XSD。我使XSD通常與文檔的結構相匹配,所以事情很好地匹配在一起。

如果您嘗試使用的模式非常複雜或者時髦您應該考慮DBMS_XMLGENDOM方法。