Oracle 11.1 から 11.2 に移行したい移行プロジェクトの 1 つで、非常に特殊な動作に直面しています。
古いクエリは次の形式でした。
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
COL_B
Oracle 11.1 では、列に英数字の値が含まれていても、すべてがスムーズに機能します。
オラクル 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
オペレーターの動作を決定するフラグはありますか?