加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

使用Oracle SQL生成嵌套XML

发布时间:2021-05-22 12:49:23 所属栏目:站长百科 来源:网络整理
导读:伴侣们, 我正在行使Oracle 10g,我必要行使以下xml名目标SQL从表中天生功效: RESULTS ROW EMPNO7839/EMPNO ENAMEKING/EMPNO SUBROWS ROW EMPNO7369/EMPNO ENAMESMITH/EMPNO ... Rest of the EMP table records excluding KING /ROW /SUBROWS /ROW/RESULTS 规

伴侣们,

我正在行使Oracle 10g,我必要行使以下xml名目标SQL从表中天生功效:

<RESULTS>
    <ROW>
        <EMPNO>7839</EMPNO>
        <ENAME>KING</EMPNO>
        <SUBROWS>
            <ROW>
                <EMPNO>7369</EMPNO>
                <ENAME>SMITH</EMPNO>
                ... Rest of the EMP table records
                excluding KING
            </ROW>
        </SUBROWS>
    </ROW>
</RESULTS>

法则是表现在外部行中选择的记录,子行应包括除外部行中表现的记录之外的全部其他记录.记录没有条理布局.

在上面的示例中,在外部行中选择了King,因此子行应包括来自emp的全部记录,不包罗King.

这个查询给了我必要的功效集:

select e.empno,e.ename,cursor(select empno,ename
              from emp where empno <> 7839) 
from emp e 
where empno = 7839

可是,当我实行行使以下要领从今天生XML时:

select xmlelement("RESULTS",xmlagg(xmlelement("ROW",xmlelement("EMPNO",empno),xmlelement("ENAME",ename),cursor(SELECT xmlagg(xmlelement("SUBROWS",xmlelement("ROW",ename)
                                                                                )
                                                           )
                                               )
                                  FROM emp 
                                  WHERE empno <> 7839
                                  )                            
                            )

                 )
                 )                 
from emp 
where empno = 7839

我收到以下错误:

ORA-22902: CURSOR expression not allowed
22902. 00000 -  "CURSOR expression not allowed"
*Cause:    CURSOR on a subquery is allowed only in the top-level
           SELECT list of a query.

我实行过行使DBMS_XMLGEN:

SELECT DBMS_XMLGEN.getXML('select empno,ename,ename
                                         from emp 
                                         where empno <> 7839) as SUBROWS
                            from emp 
                            where empno = 7839') 
FROM dual

Whist以预期的名目输出XML,但它没有表现正确的元素名称.

任何辅佐办理这个题目将很是谢谢.

提前叩谢

这不起浸染?
select xmlelement("RESULTS",(SELECT xmlagg(xmlelement("SUBROWS",ename)
                                                                            )
                                                       )
                                           )
                              FROM emp 
                              WHERE empno <> 7839
                              )                            
                        )

             )
             )                 
from emp 
where empno = 7839

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读