sql - Oracle 11.2.0.3.0 中带有 existsNode 的奇怪数字比较行为

标签 sql database oracle casting oracle11g

我正在尝试选择表格的所有行,其中一列包含特定的 xml 值。 当我对我的本地数据库或我们的内部测试服务器之一运行查询时,它工作正常。但是,在客户测试服务器上,查询不返回任何行。

SELECT * FROM product WHERE existsnode(...) = 1

我发现如果我引用比较值,它适用于所有数据库:

SELECT * FROM product WHERE existsnode(...) = '1'

我想了解为什么会发生这种情况以及解决此问题的好方法。 所有系统上的数据库版本都是11.2.0.3.0。

编辑: 我做了一些进一步的研究,发现返回的数据类型实际上是一个数字,如 Oracle 文档中所述。

SELECT dump(existsNode(...)) FROM product;

在所有数据库上返回“Typ=2, Len=1: 128”。

但是,我在 existsnode 查询字符串中有一些双引号,这些双引号似乎在我遇到奇怪比较问题的数据库中丢失了:

SELECT existsnode(xmltype(attributes), '/attrs/attr[@name="SomeFlag"]') FROM product;

在查询有效的数据库上,我得到以下结果作为列名:

EXISTSNODE(XMLTYPE(ATTRIBUTES), '/ATTRS/ATTR[@NAME="SOMEFLAG"]')

在我得到的其他数据库上

EXISTSNODE(XMLTYPE(ATTRIBUTES), '/ATTRS/ATTR[@NAME=SOMEFLAG]')

最佳答案

在 support.oracle.com 上查看文档编号,文档 ID 14087914.8(错误编号 14087914)。

根据文档,尝试按照以下步骤查看结果是否符合您的预期。

alter session set "_fix_control"='9569678:off

您的另一个选择是升级到 11.2.0.4。

关于sql - Oracle 11.2.0.3.0 中带有 existsNode 的奇怪数字比较行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24326427/

相关文章:

mysql - 您可以将自己的数据库用于 Facebook 应用程序吗?

c# - 无效字符错误SQL,OracleDataReader

mysql - SQL Before Insert 触发器 - 插入另一个表并更新外键

mysql - 为什么当前的数据库查询优化技术不支持计算列的优化?

sql - 将 SQL 脚本与数据库关联

sql - 由于错误 0x80070643,无法安装 Microsoft SQL Server Management Studio

java - 非常快地将多行插入 Oracle 数据库

mysql - Oracle 和 MySQL 日期列格式

sql - 具有包含列的索引,有什么区别?

sql - 将单个文本单元格拆分为多行并复制其他列