我正在試驗Python和Oracle XML DB。我在Oracle 11g數據庫中有一個包含XMLType列和ID列的表。 XML列的存儲模型是對象關係。有時候,我需要得到一個整體的XML文件,而往往是超過4000個字符長,所以我用這個查詢得到一個CLOB:從Oracle數據庫讀取的XML文件中的額外空白 - 爲什麼?
select t.representation.getclobval()
from myxmldocs t
where id=:documentId
當我運行此查詢的輸出包括多餘的空格,用換行和在我插入的XML文檔中絕對不存在的XML元素之間的選項卡。效果是某種格式,使輸出看起來像這樣:
<A>\n
\t<B></B>\n
\t\t<C>Some text</C>\n
\t\t<C>Some more text</C>\n
\t<B></B>\n
...
等等。非常漂亮和可讀,但爲什麼我會得到它?它還會混淆我正在使用的其他庫,這會扼殺額外的空格。
如果我刪除getclobval()我的Python客戶端沒有得到一個CLOB,但一個對象,我不知道如何處理它。
這似乎一致;我使用sqlplus命令行客戶端來解決這個問題,並使用不同的XML Schema創建其他表,然後查詢它們。在我原型的以前版本中,我使用XMLType列使用CLOB存儲模型,但沒有這個問題。
我應該如何重寫查詢以僅使用XML文件獲取CLOB而沒有額外的格式?
更新:
:按照意見要求,這是我得到運行命令行客戶端查詢select dump(t.representation) from myxmldocs t where id=:documentId
輸出(:從數據庫的實際,現有的ID documentId更換當然)
DUMP(T.REPRESENTATION)
--------------------------------------------------------------------------------
Typ=58 Len=218: 32,156,148,1,0,0,0,0,80,193,223,20,0,0,0,0,216,15,47,21,0,0,0,0,
80,44,55,21,0,0,0,0,0,202,154,59,160,15,0,0,160,15,0,0,1,0,4,0,220,190,195,71,1,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,174,33,65,0,15,0,72,0,1,0,0,0,0,0,0,0,49,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0
「它還會混淆我正在使用的其他圖書館對額外空白區域的遏制。「 - 那些圖書館很差。這些空格是完全合法的XML。 – Mat 2013-03-18 10:45:44
同意,但我沒有控制庫,它提供了一個功能,從零開始重新實現真的非常耗時。 – Btz 2013-03-18 11:01:58
@Btz,你可以用查詢結果更新你的問題:'從myxmldocs中選擇dump(t.representation)t其中id =:documentId'? – 2013-03-18 11:41:47