2012-09-12 135 views
3

我開始感覺有點暗淡。我讀過很多網頁,並嘗試了許多方法來做一些看起來相對簡單的事情。Oracle 10g:使用XMLSequence和ExtractValue從Clob讀取XML值

我有一些XML存儲表。該表包含一個ID和CLOB中的XML。喜歡的東西:

ID = 1 

<?xml version="1.0" encoding="UTF-8" ?> 
<CricketGame xmlns="http://www.somewhere.com/cricket/2002/09" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="2002A" xsi:type="CricketGame" > 
<TeamInfo TeamId="WestCountry" /> 
<SessionInfo SessionId="XhRya5m999988888" RestartSession="false" /> 
<Errors> 
<Error ErrorText="Generic Error" ErrorCode="700" SupplierErrorText="Connection: DECLINED" /> 
<Error ErrorText="Generic Error" ErrorCode="701" SupplierErrorText="Account Error" /> 
</Errors> 
</CricketGame> 

我一直在試圖用提取物和XMLSequence創建表的組合,然後extractValue一起擺脫ERRORTEXT,錯誤代碼和SupplierErrorText的具體數值。我的SQL:

SELECT 
extractvalue(value(p), '/Error/@ErrorText') as errText, 
extractvalue(value(p), '/Error/@ErrorCode') as errCode, 
extractvalue(value(p), '/Error/@SupplierErrorText') as supErrText 
FROM gamestable s, 
    Table(
    XMLSequence(
    extract(xmltype(s.xml), '/CricketGame/Errors/Error') 
    ) 
) p 
where 
s.gameID = 1 

SQL不返回任何錯誤,但它也不返回數據。

任何人都可以看到我做錯了什麼?我是否完全錯誤?這可能與xmlns有關嗎?

非常感謝提前!

回答

2

你說得對,問題與xmlns有關。我不明白XML很好,所以我不能告訴你,如果這是一個很好的解決方案,但它至少看起來在這個例子中工作:

SELECT 
extractvalue(value(p), '/Error/@ErrorText', 'xmlns="http://www.somewhere.com/cricket/2002/09"') as errText, 
extractvalue(value(p), '/Error/@ErrorCode', 'xmlns="http://www.somewhere.com/cricket/2002/09"') as errCode, 
extractvalue(value(p), '/Error/@SupplierErrorText', 'xmlns="http://www.somewhere.com/cricket/2002/09"') as supErrText 
FROM gamestable s, 
    Table(
    XMLSequence(
    extract(xmltype(s.xml), '/CricketGame/Errors/Error', 'xmlns="http://www.somewhere.com/cricket/2002/09"') 
    ) 
) p 
where 
s.gameID = 1 
+0

太感謝你了,不知道爲什麼我無法解決這個問題。 – HCC