to be used in select query.
Let we have function getXML() that returns the following XMLType value:
<datas1:employmenttypeslist xmlns:datas1="http://mynamespace/"> <datas1:employmenttypes> <datas1:id>676</datas1:id> <datas1:code>NOT_WORK</datas1:code> <datas1:text>Not working</datas1:text> </datas1:employmenttypes> <datas1:employmenttypes> <datas1:id>677</datas1:id> <datas1:code>OWN_BUSINESS</datas1:code> <datas1:text>Own business</datas1:text> </datas1:employmenttypes> <datas1:employmenttypes> <datas1:id>678</datas1:id> <datas1:code>PENSIONER</datas1:code> <datas1:text>Pensioner</datas1:text> </datas1:employmenttypes> </datas1:employmenttypeslist>
So, to transform the XMLType into a table we can use several methods.
Method #1
select
extractValue(xmlt.COLUMN_VALUE,'*/p:id','xmlns:p="http://mynamespace/"') as id,
extractValue(xmlt.COLUMN_VALUE,'*/p:code','xmlns:p="http://mynamespace/"') as code,
extractValue(xmlt.COLUMN_VALUE,'*/p:text','xmlns:p="http://mynamespace/"') as text
from
TABLE(XMLSEQUENCE(
EXTRACT(
(
select getXML() from dual
),
'/*/*'
)
)) xmlt
Method #2
select *
FROM XMLTABLE(XMLNAMESPACES ('http://mynamespace/' AS "p"),'/*/*'
PASSING
getXML()
COLUMNS
--describe columns and path to them:
id varchar2(10) PATH '/*/p:id',
code varchar2(10) PATH '/*/p:code',
text varchar2(255) PATH '/*/p:text'
) xmlt
;
Комментариев нет:
Отправить комментарий