gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:47:42 26 4
gpt4 key购买 nike

我正在尝试选择表格的所有行,其中一列包含特定的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com