2012-09-12 94 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