【问题标题】:ORACLE XML values extract as pivotORACLE XML 值提取为枢轴
【发布时间】:2014-05-21 00:48:26
【问题描述】:

我想知道有什么方法可以让我将表单 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

谢谢你..

【问题讨论】:

    标签: xml oracle pivot extract


    【解决方案1】:

    使用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;
    

    【讨论】:

    • hkutluay 非常感谢你拯救了我的一天再次感谢它的工作
    • 我会在 5 分钟内选择这个作为我的答案 :)
    • 这没问题,但是当 xml 列表包含大量(1000 条记录)数据时,它不起作用,你能给我一个解决方案吗
    • 现在可以了,因为大量数据 xmlargs 工作很有趣。感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-25
    相关资源
    最近更新 更多