2016-10-13 3 views
1

こんにちは、 XMLノードに存在する場合は、同じノードのカンマ区切りリストを取得するのに役立つ必要があります。私はこの使用したXPathのOracleクエリからカンマ区切りの名前リスト(ABC、PQR)を取得する必要がありますXpathを使用してコンマ区切りを取得するOracleクエリー同じノードのリスト

<Event> 
    <Detail> 
     <List> 
      <Element> 
       <name>ABC</name> 
       <salary>150</salary> 
      </Element> 
      <Element> 
       <name>PQR</name> 
       <salary>250</salary> 
      </Element> 
     </List> 
    </Detail> 
</Event> 

- : 私のXMLは、私のデータベースに格納されている。このようなものです。 私はたくさん試してみましたし、私はこのような方法を取得する場合: - その後

NVL(VALUE (line).EXTRACT ('/Event/Detail/List/Element/name/text()') .getstringval(),'') Name List 

、私の出力はABCPQRました。

スペースまたはコンマはありませんでした。誰も私にこれを手伝ってもらえますか?

期待出力は次のとおりです。 - ABC、PQR事前に

感謝:)

答えて

1

あなたではなく、単一の値よりも、XML文書のうち、値のリストを引っ張っているので、私は考えますXMLTABLEを使用してそれらをすべてテーブルに選択し、LISTAGGと一緒に結合する方が良いでしょう。ここで

は例です:

SQL> CREATE TABLE xmltest (id INTEGER, x XMLTYPE); 

Table created. 

SQL> INSERT INTO xmltest (id, x) VALUES (1, XMLTYPE('<Event> 
    2  <Detail> 
    3   <List> 
    4    <Element> 
    5     <name>ABC</name> 
    6     <salary>150</salary> 
    7    </Element> 
    8    <Element> 
    9     <name>PQR</name> 
10     <salary>250</salary> 
11    </Element> 
12   </List> 
13  </Detail> 
14 </Event>')); 

1 row created. 

SQL> COMMIT; 

Commit complete. 

SQL> SELECT t.id, LISTAGG(y.name, ',') WITHIN GROUP (ORDER BY ROWNUM) 
    2 FROM xmltest t, 
    3   XMLTABLE('//Element' PASSING t.x COLUMNS name VARCHAR2(1000) PATH 'name') y 
    4 GROUP BY t.id; 

     ID 
---------- 
LISTAGG(Y.NAME,',')WITHINGROUP(ORDERBYROWNUM) 
-------------------------------------------------------------------------------- 
     1 
ABC,PQR 

カンマで文字列値を一緒に参加するのXPath 2.0、string-join内の関数は、あります。必要なだけのようだが、オラクルはそれをサポートしていないようだ。

関連する問題