ORA-01424: エスケープ文字に続く文字がないか、または無効です。
特定の条件とは以下のとおりです。
- Oracle11g(11.1.0.7)である。
- 検索対象列がNVARCHAR2(UTF8)である。
- サブクエリを多用した複雑なSQLである。
- LIKEの条件値をバインド変数化している。
- LIKEの条件値に複数の"_"が含まれている。
どうにも原因がわからないため、いろいろ試行錯誤した結果、バインド変数化したLIKEの条件値をリテラル化すると正常に動作するようになりました。
LIKE :b1 ESCAPE TO_NCHAR('\')↓
LIKE '%ABC\_DEF\_GHI\_JKL%' ESCAPE TO_NCHAR('\')
SQLが共有されないのでリテラル化するのは嫌なんですが、やむをえません。
NVARCHAR2がらみのLIKE検索はどうしてこうやっかいなんでしょう...
【関連エントリ】
[Oracle] LIKE 検索では全角の'%'、'_'も特殊文字として扱われる? 2007/04/10
[Oracle] 11gでNVARCHAR2の列を対象としたLIKE検索が挙動不審に... 2013/04/04