在postgres中等效的oracle evalname函数

时间:2015-03-16 20:41:42

标签: postgresql

Oracle支持带有evalname功能的动态XMLElement名称。 postgres中是否有类似的功能来动态获取XMLElement名称而不是使用常量?

ORACLE中的示例:

select xmlelement(evalname(ENAME),EMPNO) from EMP;

此语句将导致enames列表为单独的xml元素。

<SMITH>7369</SMITH>
<ALLEN>7499</ALLEN>
<WARD>7521</WARD>

不确定postgres是否有类似的东西。

感谢。

2 个答案:

答案 0 :(得分:2)

我能够使用执行格式在Postgres中使用动态元素名称构造xml。发布此信息以防万一有人遇到同样的问题。

execute format('SELECT XMLElement(NAME %I, $1)', emp_name) USING empno from emp;

<SMITH>7369</SMITH>
<ALLEN>7499</ALLEN>

与XMLForest相同,并且在XMLElement中包含XMLAttributes。

答案 1 :(得分:0)

据我所知,没有这样的功能。

最接近的是添加一个带有empname的属性:

select xmlelement(name emp, xmlattributes(empname), empno)
from emp;

生成:

<emp empname="Smith">7369</emp>
<emp empname="Allend">7499</emp>
<emp empname="Ward">7521</emp>

就个人而言,我会发现格式很多更容易解析,例如在XSLT或XML解析器中。因为为了处理标签,您需要知道标签名称,如果标签每行都更改,则不需要这样做 - 但这可能就是我。