2017-09-11 11 views
0

私はそうのようなXMLデータがあり、Oracleデータベース内のテーブル列「値」は「ユーザーの持っている:抽出XML

<Attributes> 
    <Map> 
    <entry key="first" value="Linda"/> 
    <entry key="groups" value="Manager"/> 
    <entry key="last" value="Davis"/> 
    <entry key="locked" value="N"/> 
    <entry key="status" value="A"/> 
    </Map> 
</Attributes> 

は私が好きなそれらを抽出したい:

Attributes_Values 
================= 
first = Linda 
groups = Manager 
last = Davis 

私はExtractValue関数を試しましたが、 'missing right parenthesis'というエラーを返します。下のクエリ:

SELECT EXTRACTVALUE(Values, '/Attributes/Map/entry[@key='first']@value') "Attribute_Values" from 
Users; 

答えて

1

SQL:

with t as (
select xmltype('<Attributes> 
    <Map> 
    <entry key="first" value="Linda"/> 
    <entry key="groups" value="Manager"/> 
    <entry key="last" value="Davis"/> 
    <entry key="locked" value="N"/> 
    <entry key="status" value="A"/> 
    </Map> 
</Attributes>') xml from dual 
) 

select dtl.extract('//@key').getStringVal() || ' = ' || dtl.extract('//@value').getStringVal() as "Attributes_Values" 
from t s 
    ,table(XMLSequence(s.xml.extract('Attributes/Map/entry'))) dtl 

結果:

Attributes_Values 
first = Linda 
groups = Manager 
last = Davis 
locked = N 
status = A 
1

アポストロフィの代わりに引用符。

SELECT EXTRACTVALUE(xmltype('<Attributes> 
    <Map> 
    <entry key="first" value="Linda"/> 
    <entry key="groups" value="Manager"/> 
    <entry key="last" value="Davis"/> 
    <entry key="locked" value="N"/> 
    <entry key="status" value="A"/> 
    </Map> 
</Attributes>'), '/Attributes/Map/entry[@key="first"]/@value') "Attribute_Values" from dual; 
+0

作品罰金!関連するキー識別子を渡すことによって複数の値を抽出できるかどうか疑問に思っていました。例えば。 @key = "first"、@key "last"。 –

+1

はい、ただし、extractvalueでは使用できません。 I'thikの抽出値は廃止されました。 XMLTypeの渡し(」 <エントリーキー= "最初の" 値 'XMLTABLEからSELECT *( '[@キー= "最初の" またはキー= "最後の" @]/@値/属性/マップ/エントリ' <エントリキー= "グループ" value = "マネージャ" /> ')列値varchar(200)path'。 ') ' –

+0

xmltableとxmlqueryについてはgoogleを使用する必要があります。 –

関連する問題