我正在尝试选择一个表的所有行,其中一列包含特定的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]')
答案 0 :(得分:2)
在support.oracle.com上查看文档编号,文档ID 14087914.8(错误号14087914)。
根据文档,尝试关注以查看结果是否产生您所期望的结果。
alter session set "_fix_control"='9569678:off
您的其他选择,涉及升级到11.2.0.4。