0

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_BOracle 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オペレーターの動作を決定するフラグはありますか?

4

0 に答える 0