Oracle:逻辑运算符AND在11.1和11.2中处理了different

时间:2016-10-27 13:47:33

标签: oracle oracle11g logical-operators oracle11gr2 oracle11gr1

我们在其中一个迁移项目中遇到了一个非常特殊的行为,我们希望从Oracle 11.1迁移到11. 2

旧查询采用以下格式:

SELECT * FROM TABLE_A, TABLE_X WHERE
(NVL(TO_NUMBER(COL_A), 0) > 0 OR NVL(TO_NUMBER(COL_B), 0) > 0)

AND

(INSTR('Dummy', COL_X) > 0 OR COL_X_ID = 100)

AND COL_A_ID = COL_X_ID

在Oracle 11.1中,即使列COL_B包含字母数字值,一切也能顺利进行!

Oracle 11.2

相比之下,新版本会报告"无效数字"错误。

当我们切换逻辑运算符AND的项时,它也适用于此版本:

SELECT * FROM TABLE_A, TABLE_X WHERE
(INSTR('Dummy', COL_X) > 0 OR COL_X_ID = 100)

AND

(NVL(TO_NUMBER(COL_A), 0) > 0 OR NVL(TO_NUMBER(COL_B), 0) > 0)

AND COL_A_ID = COL_X_ID

不幸的是,我们有数百个查询,并且缺少重构查询的资源。

问题

是否有标志确定AND运营商的行为?

0 个答案:

没有答案