如何结合属性名称使用 XMLTABLE (Oracle SQL)
How to use XMLTABLE (Oracle SQL) in combination with attribute names
我正在查询包含 XML.
的 Oracle SQL table
(简化)XML结构如下:
<aggregate type="HeadAggregate">
<entity type="Default" root="true" id="asdb7e9e-93324-43242d-b83a-f2d3202ed">
<attribute name="ObjectName" multivalue="false">ExampleName</attribute>
<attribute name="Subprocesses" multivalue="false">false</attribute>
<attribute name="ObjectDesc" multivalue="false">Description</attribute>
</entity>
<aggregate>
我想获取对象名称。因此我写了以下查询:
SELECT xt.*
FROM DATABASENAME.TABLENAME x,
XMLTABLE('/aggregate/entity[@type = ''Default'']'
PASSING XMLTYPE(x.DATA)
COLUMNS
attribute_name VARCHAR2(100) PATH 'attribute[1]'
) xt
到目前为止一切顺利。这很好用!我得到了想要的输出。
但是,现在我想通过引用属性名称来替换 PATH 中的“[1]”,以使我的脚本更加灵活。
所以我将脚本更改为:
SELECT xt.*
FROM DATABASENAME.TABLENAME x,
XMLTABLE('/aggregate/entity[@type = ''Default'']'
PASSING XMLTYPE(x.DATA)
COLUMNS
attribute_name VARCHAR2(100) PATH 'attribute[@name = ''ObjectName'']'
) xt
出于某种原因,现在我收到以下错误消息:
00907. 00000 - "missing right parenthesis"
*Cause:
*Action:
Error at Line: 3 Column: 47
我为此苦苦挣扎了一段时间。
我做错了什么?
非常感谢!
您可以(或应该)使用双引号,而不是转义单引号:
SELECT xt.*
FROM DATABASENAME.TABLENAME x,
XMLTABLE('/aggregate/entity[@type = "Default"]'
PASSING XMLTYPE(x.DATA)
COLUMNS
attribute_name VARCHAR2(100) PATH 'attribute[@name = "ObjectName"]'
) xt
我正在查询包含 XML.
的 Oracle SQL table(简化)XML结构如下:
<aggregate type="HeadAggregate">
<entity type="Default" root="true" id="asdb7e9e-93324-43242d-b83a-f2d3202ed">
<attribute name="ObjectName" multivalue="false">ExampleName</attribute>
<attribute name="Subprocesses" multivalue="false">false</attribute>
<attribute name="ObjectDesc" multivalue="false">Description</attribute>
</entity>
<aggregate>
我想获取对象名称。因此我写了以下查询:
SELECT xt.*
FROM DATABASENAME.TABLENAME x,
XMLTABLE('/aggregate/entity[@type = ''Default'']'
PASSING XMLTYPE(x.DATA)
COLUMNS
attribute_name VARCHAR2(100) PATH 'attribute[1]'
) xt
到目前为止一切顺利。这很好用!我得到了想要的输出。
但是,现在我想通过引用属性名称来替换 PATH 中的“[1]”,以使我的脚本更加灵活。 所以我将脚本更改为:
SELECT xt.*
FROM DATABASENAME.TABLENAME x,
XMLTABLE('/aggregate/entity[@type = ''Default'']'
PASSING XMLTYPE(x.DATA)
COLUMNS
attribute_name VARCHAR2(100) PATH 'attribute[@name = ''ObjectName'']'
) xt
出于某种原因,现在我收到以下错误消息:
00907. 00000 - "missing right parenthesis"
*Cause:
*Action:
Error at Line: 3 Column: 47
我为此苦苦挣扎了一段时间。 我做错了什么?
非常感谢!
您可以(或应该)使用双引号,而不是转义单引号:
SELECT xt.*
FROM DATABASENAME.TABLENAME x,
XMLTABLE('/aggregate/entity[@type = "Default"]'
PASSING XMLTYPE(x.DATA)
COLUMNS
attribute_name VARCHAR2(100) PATH 'attribute[@name = "ObjectName"]'
) xt