【问题标题】:oracle evalname function equivalent in postgrespostgres中等效的oracle evalname函数
【发布时间】:2015-05-19 03:22:21
【问题描述】:

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

ORACLE 中的示例:

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

此语句将生成名称列表作为单独的 xml 元素。

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

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

谢谢。

【问题讨论】:

  • 这将有助于提供一个具有预期结果的示例。
  • 请编辑问题以改进它。切勿在 cmets 中隐藏重要信息。单击问题下方的“编辑”。并添加原始 XML 值以使示例更有用。
  • 你为什么恢复 a_horse 的改进?请显示示例值。这可能会有所帮助:stackoverflow.com/questions/7491479/…

标签: postgresql


【解决方案1】:

我能够找到一种解决方法,在 Postgres 中使用执行格式构建具有动态元素名称的 xml。发布这个以防万一有人遇到同样的问题。

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

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

同样适用于 XMLForest 并在 XMLElement 中包含 XMLAttributes。

【讨论】:

    【解决方案2】:

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

    你能得到的最接近的方法是添加一个带有 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 解析器中。因为为了处理标签,您需要知道标签名称,如果标签为每一行更改,您就不需要知道 - 但这可能只是我。

    【讨论】:

    • 感谢您的意见。这对我没有帮助,因为我正在尝试从 oracle 迁移现有功能并试图避免更改 xml 架构。有没有办法通过从表中选择或调用返回列列表而不是 XMLElement 名称的常量值的函数来获取名称的动态值?
    • @PrasadChinni:除了为此编写自己的函数之外,不,我不这么认为。
    • 我正在尝试编写自定义函数。有什么方法可以调用 XMLElement 名称的函数吗?谢谢。
    猜你喜欢
    • 2020-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 2021-01-09
    相关资源
    最近更新 更多