【问题标题】:Using ora:view with XMLTable to Query a Relational Table as XML使用带有 XMLTable 的 ora:view 以 XML 形式查询关系表
【发布时间】:2011-04-04 16:24:41
【问题描述】:

我有一个名为 DOCTYPES 的 Oracle 关系表,其中包含 ID、DOCTYPE、SUBTYPE 列。

当我在 Oracle SQL Developer 中运行以下语句时

SELECT * FROM XMLTable('for $i in ora:view("LAZ", "DOCTYPES")/ROW
                        return $i/SUBTYPE')

我按预期返回标签之间的结果。但是当我运行以下语句时,我得到一个错误:

SELECT * FROM XMLTable('for $i in ora:view("LAZ", "DOCTYPES")/ROW
                        return <SUBTYPE="{$i/SUBTYPE}"/>')

LPX-00801:“=”处的 XQuery 语法错误。我不明白为什么第二个语句不起作用。

非常感谢您提前提供的帮助。

【问题讨论】:

标签: xquery xmltype


【解决方案1】:

不知道 Oracle 对 XQuery 做了什么,但撇号之间的语句显然在 '=' 处有 XQuery 语法错误,因为 IMO 被正确诊断。

这是因为您正在打开一个直接元素构造函数,但等号错误地跟随在标记名称之后。在直接元素构造函数内部使用等号将属性名称与属性值分开。所以以下可能有效:

SELECT * FROM XMLTable('for $i in ora:view("LAZ", "DOCTYPES")/ROW
                        return <SUBTYPE name="{$i/SUBTYPE}"/>')

具体请参考XQuery recommendation中的3.7.1 Direct Element Constructors

【讨论】:

    【解决方案2】:

    语法错误。

    SELECT * FROM XMLTable('for $i in ora:view("LAZ", "DOCTYPES")/ROW
                        return <SUBTYPE="{data($i/SUBTYPE)}"/>')
    

    【讨论】:

    • 就 '=' 处的语法错误而言,如果这比原来的更好,那将是令人惊讶的。
    • 正确,我错过了那里的属性。
    猜你喜欢
    • 1970-01-01
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 2013-10-31
    • 2019-06-13
    • 1970-01-01
    相关资源
    最近更新 更多