2016-10-31 31 views
1
<phone type="work">905-555-7258</phone> 
<phone type="home">416-555-2937</phone> 
<phone type="cell">905-555-8743</phone> 
<phone type="cottage">613-555-3278</phone> 
... 

SELECT 
     XMLCAST(XMLQUERY ('$d/customerinfo/phone[n]/@type' 
         PASSING INFO AS "d") as VARCHAR(128)) type, 
     XMLCAST(XMLQUERY ('$d/customerinfo/phone[n]' 
         PASSING INFO AS "d") as VARCHAR(128)) number 
FROM CUSTOMER; 

n電話番号を選択するにはどうすればよいですか?私はforループ(java)のようなものを考えていますが、DB2のSQLでそれを行う方法はありません。 アイデアdb2 SQL XMLQUERY LOOP

+0

は、あなたが持っているどのように多くの文書を追加し、予想される出力できますか?これは、SQLとXQueryを組み合わせて実行可能にする必要があります。 –

答えて

1

ROW_NUMBERとCTEを組み合わせる:

SELECT * FROM 
(
SELECT ROW_NUMBER() OVER() N,X.* 
FROM XMLTABLE ('$cust/customerinfo/phone' PASSING 
XMLPARSE(CLOB('<customerinfo Cid="1003"> 
    <name>Robert Shoemaker</name> 
    <addr country="Canada"> 
    <street>1596 Baseline</street> 
    <city>Aurora</city> 
    <prov-state>Ontario</prov-state> 
    <pcode-zip>N8X 7F8</pcode-zip> 
    </addr> 
    <phone type="work">905-555-7258</phone> 
    <phone type="home">416-555-2937</phone> 
    <phone type="cell">905-555-8743</phone> 
    <phone type="cottage">613-555-3278</phone> 
</customerinfo>')) as "cust" 
    COLUMNS 
    "PHONETYPE" CHAR(30) PATH '@type', 
    "PHONENUM" CHAR(15) PATH '.' 
) as X 
) AS phones 
WHERE 
N=4 
+0

互換性のある引数を持つ "FUNCTION"型の "XMLPARSE"という名前の認可ルーチンは見つかりませんでした。SQLCODE = -440、SQLSTATE = 42884、DRIVER = 4.19.26 SQLコード:-440、SQLの状態:42884 –