0

在我们想要从 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包含字母数字值,一切都可以顺利进行!

甲骨文 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操作员的行为?

4

0 回答 0