作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试选择表格的所有行,其中一列包含特定的 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/
我正在尝试选择表格的所有行,其中一列包含特定的 xml 值。当我对我的本地数据库或我们的内部测试服务器之一运行查询时,它工作正常。但是,在客户测试服务器上,查询不返回任何行。 SELECT * FRO
我是一名优秀的程序员,十分优秀!