3

少しぼんやりと感じ始めています。私はたくさんのウェブページを読み、比較的単純に見えることをするためにいくつかの方法を試しました。

XMLにテーブルを保存しました。このテーブルには、CLOB内のIDと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>

私はextractとXMLSequenceの組み合わせを使用してテーブルを作成し、次にextractvalueを使用してErrorText、ErrorCode、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と関係がありますか?

よろしくお願いします!

4

1 に答える 1

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
于 2012-09-13T05:16:34.247 に答える