[Oracle] 11gでNVARCHAR2の列を対象としたLIKE検索が挙動不審に... | Archive Redo Blog

Archive Redo Blog

DBエンジニアのあれこれ備忘録

Oracle11gで、ある特定の条件を満たすSQLでLIKE検索を行った時に、ORA-01424が発生しました。

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