Oracle 多个 XMLAgg
Posted
技术标签:
【中文标题】Oracle 多个 XMLAgg【英文标题】:Oracle multiple XMLAgg 【发布时间】:2014-11-26 14:20:26 【问题描述】:我正在使用 Oracle 10g 构建一个 sql 查询, 并希望获得以下 xml 格式的 sql 输出:
<Users>
<User>
<USRID>1234</USRID>
<USERNAME>ABCD</USERNAME>
<ROLES>
<ROLE>
<ROLEID>1</ROLEID>
<ROLENAME>GlobalAdministrator</ROLENAME>
<ISDEFAULTROLE>1</ISDEFAULTROLE>
</ROLE>
<ROLE>
<ROLEID>2</ROLEID>
<ROLENAME>Administrator</ROLENAME>
<ISDEFAULTROLE>0</ISDEFAULTROLE>
</ROLE>
</ROLES>
</User>
<User>
<USRID>2312</USRID>
<USERNAME>XUX</USERNAME>
<ROLES>
<ROLE>
<ROLEID>3</ROLEID>
<ROLENAME>AccountManager</ROLENAME>
<ISDEFAULTROLE>1</ISDEFAULTROLE>
</ROLE>
<ROLE>
<ROLEID>5</ROLEID>
<ROLENAME>Approver</ROLENAME>
<ISDEFAULTROLE>0</ISDEFAULTROLE>
</ROLE>
</ROLES>
</User>
</Users>
我刚刚构建的Sql:
SELECT XMLElement("Users",
XMLAgg(XMLElement("User",
XMLElement("USRID",u.USRID) ,
XMLElement("USERNAME",u.USERNAME) ,
XMLElement("Roles",
SELECT xmlagg(XMLElement("Role",
XMLElement("ROLEID",ur.ROLEID),
XMLElement("ROLENAME",r.NAME),
xmlelement("ISDEFAULTROLE",ur.PRIMARY))
FROM USERROLE ur,role r WHERE u.USRID = ur.USRID AND r.ROLEID = ur.ROLEID))))).getClobVal()
FROM usr u
但它给出以下错误: ORA-00936: 缺少表达式 00936. 00000 - “缺少表达式” *原因: *行动: 行错误:26 列:1
我该怎么做?
【问题讨论】:
【参考方案1】:我想通了:
SELECT XMLElement("Users",
XMLAgg(XMLElement("User"
,XMLElement("USRID",u.USRID)
,XMLElement("USERNAME",u.USERNAME)
,xmlElement("Roles",
(
select xmlAgg(xmlElement("Role"
,XMLElement("ROLEID",ur.ROLEID)
,XMLElement("ROLENAME",r.NAME)
,xmlelement("ISDEFAULTROLE",ur.PRIMARY)))
from USERROLE ur,role r where u.USRID = ur.USRID and r.ROLEID = ur.ROLEID)
)))).getClobVal()
from usr u
【讨论】:
以上是关于Oracle 多个 XMLAgg的主要内容,如果未能解决你的问题,请参考以下文章