0

在 Oracle 11 中,我有这样的查询:

SELECT XML_TABLE.*
  FROM XML_DATA,
       XMLTABLE('//root' PASSING XML_DATA.XML COLUMNS
                NAME VARCHAR2 (50) PATH '//root/name/text()',
                HAS_DOCUMENT NUMBER PATH 'empty(//root/document)') XML_TABLE

但是 XPATH 'empty(//root/document)' 在 10g 数据库中不起作用。

什么是替代方案?我尝试使用 'count(//root/document)'(在 XPATH 1.0 中受支持),但也不起作用。

提前致谢。

4

1 回答 1

0

我做了一个解决方法。

XML:

<root>
  <name>text</name>
  <document id="1">
    <other_tags></other_tags>
  </document>
</root>

SQL:

SELECT XML_TABLE.NAME,
       DECODE (XML_TABLE.FIRST_ID, NULL, 0, 1) AS HAS_DOCUMENT
  FROM XML_DATA,
   XMLTABLE('//root' PASSING XML_DATA.XML COLUMNS
            NAME VARCHAR2 (50) PATH '//root/name/text()',
            FIRST_ID NUMBER PATH '//root/document[position()=1]/@id') XML_TABLE

这不漂亮,我承认。但它奏效了。

于 2013-04-30T17:22:56.230 回答