sql - SQL Oracle XML 空标签和属性
问题描述
我对 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;
现在我没有空标签,但我无法放置我想要的属性。这个问题有什么解决办法吗?
最好的问候
解决方案
使用这个答案,您可以添加DELETXML
到您的第二个查询
SELECT DELETEXML(
XMLELEMENT("employees", dept.deptno,
Xmlagg(
XMLELEMENT("employee",
xmlattributes(empno AS "empno", sal AS "salary"), ename)
)
),
'//*[not(text())][not(*)]'
).getStringVal()
FROM emp
right outer join dept
ON dept.deptno = emp.deptno
GROUP BY dept.deptno;
样本输出
<employees>1<employee empno="1" salary="100">name1</employee></employees>
<employees>2<employee empno="2" salary="100">name2</employee></employees>
<employees>3<employee empno="3" salary="100">name3</employee></employees>
<employees>4</employees>
<employees>5</employees>
推荐阅读
- spring-boot - 只想为指定的 url 模式(管理服务 url)添加 JWT 过滤器,而不是为 spring boot security 中的所有 url
- kubernetes - 访问 kubernetes UI 界面时找不到服务“kubernetes-dashboard”
- angular - 如何在树形图平方图表上自定义绘制每个图块
- javascript - highcharts 在 1024 中舍入生成的 y 标签,而不是 1000
- powershell - 在 Web 请求中使用 azure 凭据
- android-studio - 如何使用毕加索将图像从 url 加载到小部件中的 imageview
- python-3.x - XML 元素树 - 使用 ET.SubElement() 附加到现有元素和属性?
- laravel - 如何使用 laravel 将图像从项目 1 上传到项目 2?
- reactjs - 如何下载到手机存储?
- vue.js - 年龄未在 html 中呈现:VueJs