gpt4 book ai didi

SQL Oracle XML 空标签和属性

转载 作者:数据小太阳 更新时间:2023-10-29 02:25:28 27 4
gpt4 key购买 nike

我对 SQL/XML 和 Oracle 有疑问。我将 Oracle 中的示例与 dept 和 emp 一起使用。一开始的情况:我想要一个带有部门和员工的 xml:

SELECT Xmlelement("employees", dept.deptno, Xmlagg(
Xmlelement("employee", ename))).
getStringVal()
FROM emp
INNER JOIN dept
ON dept.deptno = emp.deptno
GROUP BY dept.deptno;

现在我想要所有部门,即使没有任何员工(右外连接)。此外,我想要员工的一些属性:

SELECT XMLELEMENT("employees", dept.deptno, 
Xmlagg(
XMLELEMENT("employee",
xmlattributes(empno AS "empno", sal AS "salary"), ename)
)
).getStringVal()
FROM emp
right outer join dept
ON dept.deptno = emp.deptno
GROUP BY dept.deptno;

但是现在没有员工的部门有一个空标签“员工”。我有一个解决这个问题的方法:

SELECT           xmlelement("employees", 
xmlattributes(dept.deptno as "Abt"),
xmlagg( xmlforest(ename AS "employee") )
).getstringval()
FROM emp
RIGHT OUTER JOIN dept
ON dept.deptno = emp.deptno
GROUP BY dept.deptno;

现在我没有空标签,但我无法放置我想要的属性。这个问题有解决办法吗?

最好的问候 session

最佳答案

您可以使用 case 表达式来不生成流氓 <employee/>节点在第一位:

SELECT XMLELEMENT("employees", dept.deptno, 
Xmlagg(
CASE WHEN emp.empno IS NOT NULL THEN
XMLELEMENT("employee",
xmlattributes(empno AS "empno", sal AS "salary"), ename)
END
)
).getStringVal()
FROM emp
right outer join dept
ON dept.deptno = emp.deptno
GROUP BY dept.deptno;

XMLELEMENT("EMPLOYEES",DEPT.DEPTNO,XMLAGG(CASEWHENEMP.EMPNOISNOTNULLTHENXMLELEMENT("EMPLOYEE",XMLATTRIBUTES(EMPNOAS"EMPNO",SALAS"SALARY"),ENAME)END)).GETSTRINGVAL()
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
<employees>10<employee empno="7839" salary="5000">KING</employee><employee empno="7934" salary="1300">MILLER</employee><employee empno="7782" salary="2450">CLARK</employee></employees>
<employees>20<employee empno="7566" salary="2975">JONES</employee><employee empno="7876" salary="1100">ADAMS</employee><employee empno="7369" salary="800">SMITH</employee><employee empno="7902" salary="3000">FORD</employee><employee empno="7788" salary="3000">SCOTT</employee></employees>
<employees>30<employee empno="7698" salary="2850">BLAKE</employee><employee empno="7900" salary="950">JAMES</employee><employee empno="7844" salary="1500">TURNER</employee><employee empno="7654" salary="1250">MARTIN</employee><employee empno="7521" salary="1250">WARD</employee><employee empno="7499" salary="1600">ALLEN</employee></employees>
<employees>40</employees>

关于SQL Oracle XML 空标签和属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54650820/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com