XMLType从第一个节点提取不同值ID



您能帮我解决以下问题吗?我只需要一个person_number一次。1000142但是我得到的是这样的10001421000142。

因为我在xml单元格中的值有重复的数字,所以我只想提取一个唯一的人号码。

select xmltype( '<?xml version="1.0"?> 
<ROWSET> 
<ROW> <PERSON_NUMBER>1000142</PERSON_NUMBER> <LOAN_1>25000</LOAN_1> <LOAN_2>26000</LOAN_2> </ROW> 
<ROW> <PERSON_NUMBER>1000142</PERSON_NUMBER> <LOAN_1>25000</LOAN_1> <LOAN_2>26000</LOAN_2> </ROW> 
</ROWSET>').extract( '//PERSON_NUMBER[1]/text()' ) .getstringval() p# from dual;

正如您作为上一个问题的后续问题提出这个问题时我所评论的那样,请使用XPATH:

/ROWSET/ROW[1]/PERSON_NUMBER/text()

:

select xmltype(
'<?xml version="1.0"?> 
<ROWSET> 
<ROW>
<PERSON_NUMBER>1000142</PERSON_NUMBER>
<LOAN_1>25000</LOAN_1>
<LOAN_2>26000</LOAN_2>
</ROW> 
<ROW>
<PERSON_NUMBER>1000142</PERSON_NUMBER>
<LOAN_1>25000</LOAN_1>
<LOAN_2>26000</LOAN_2>
</ROW> 
</ROWSET>'
).extract( '/ROWSET/ROW[1]/PERSON_NUMBER/text()' ) .getstringval() p#
from dual;

输出:

<表类>P #tbody><<tr>1000142

你也可以这样写:

WITH tbl AS
(
SELECT XMLTYPE( 
'<?xml version="1.0"?> 
<ROWSET> 
<ROW> <PERSON_NUMBER>1000142</PERSON_NUMBER> <LOAN_1>25000</LOAN_1> <LOAN_2>26000</LOAN_2> </ROW> 
<ROW> <PERSON_NUMBER>1000142</PERSON_NUMBER> <LOAN_1>25000</LOAN_1> <LOAN_2>26000</LOAN_2> </ROW> 
</ROWSET>'    
)  xmldata
FROM dual
)
SELECT node_name, node_value
FROM tbl
, XMLTABLE('//*'
PASSING tbl.xmldata
COLUMNS node_name  VARCHAR2(100) path 'name()'
, node_value VARCHAR2(400) path 'text()')
WHERE node_name = 'PERSON_NUMBER';

如果只需要第一行中的人员编号,那么XPath应该是:

'/ROWSET/ROW[1]/PERSON_NUMBER/text()'

而不是从每个ROW中获得第一个PERSON_NUMBER

如果您的XML可以有几个不同的人物号码,其中一些或全部是重复的,那么使用XMLTable获取所有这些号码,然后获取不同的值:

select distinct x.person_number
from xmltable(
'/ROWSET/ROW'
passing xmltype( '<?xml version="1.0"?> 
<ROWSET> 
<ROW> <PERSON_NUMBER>1000142</PERSON_NUMBER> <LOAN_1>25000</LOAN_1> <LOAN_2>26000</LOAN_2> </ROW> 
<ROW> <PERSON_NUMBER>1000142</PERSON_NUMBER> <LOAN_1>25000</LOAN_1> <LOAN_2>26000</LOAN_2> </ROW> 
</ROWSET>')
columns person_number number path 'PERSON_NUMBER'
) x

,db&lt的在小提琴

最新更新