2014-04-08 58 views
1

我想知道有沒有什麼辦法,我可以把表單XML文件作爲支點?ORACLE XML值提取爲關鍵

我的代碼

select t.extract('/S/@ID').getstringval() as s 
FROM 
TABLE( 
XMLSEQUENCE( 
(select xmltype('<?xml version="1.0"?> 
<SERIAL> 
<S ID="1E0100057107" /> 
<S ID="1E0100057108" /> 
<S ID="1E0100057109" /> 
<S ID="1E0100057110" /> 
</SERIAL>').extract('//S') from dual) 
))T; 
desired output 
S 
------------------------- 
1E0100057107,1E0100057108,1E0100057109,1E0100057110 

謝謝你..

回答

0

使用LISTAGG功能(支持字符串,最多4000個字符)

select LISTAGG(t.extract('/S/@ID').getstringval(),',') WITHIN GROUP (ORDER BY 1) as s 
FROM 
TABLE( 
XMLSEQUENCE( 
(select xmltype('<?xml version="1.0"?> 
<SERIAL> 
<S ID="1E0100057107" /> 
<S ID="1E0100057108" /> 
<S ID="1E0100057109" /> 
<S ID="1E0100057110" /> 
</SERIAL>').extract('//S') from dual) 
))T; 

或者XMLAGG

select xmlagg(xmlelement(e, t.extract('/S/@ID').getstringval()|| ',')).extract('//text()').extract('//text()') 
FROM 
TABLE( 
XMLSEQUENCE( 
(select xmltype('<?xml version="1.0"?> 
<SERIAL> 
<S ID="1E0100057107" /> 
<S ID="1E0100057108" /> 
<S ID="1E0100057109" /> 
<S ID="1E0100057110" /> 
</SERIAL>').extract('//S') from dual) 
))T; 
+0

hkutluay謝謝很很多你救了我的一天再次感謝它的工作 – leosheran

+0

@leosheran不客氣。 – hkutluay

+0

我會在5分鐘內選擇這個作爲我的答案:) – leosheran