[Oracle] CONTAINS演算子を使った全文検索でORA-00932が発生 | Archive Redo Blog

Archive Redo Blog

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

10g で正常に動作していた全文検索の SQL を 11g で動かすと以下のようなエラーが発生するようになりました。

ORA-00932: データ型が一致しません: -が予想されましたがCLOBです。

いろいろと構文をいじってみたところ、このエラーが発生する SQL には以下のような共通の特徴があることがわかりました。

  • CONTAINS 演算子を使っている。
  • 全文検索の索引付け対象列が CLOB 型である。
  • GROUP BY 句を使っている。
  • テーブルを結合している。

おそらくバグだと思われます。

全文検索した結果を GROUP BY 句で集計するなんていうことはあまりやらないでしょうから、発覚していないのでしょう。


ただ、さらにいろいろ試していると、以下のようなことをすれば解消することもわかりました。

  • 該当するテーブルのオプティマイザ統計情報を収集する。(※解消しない場合もあり)
  • 列リストにROW_NUMBER() OVER( ORDER BY ~ )を加える。

なんじゃそりゃ、って感じです。


しかし...

特殊な機能を特殊な使い方をすると、よくこういうことがあるんですが、「バージョンアップしたらエラーが出るようになった」というのは勘弁してほしいですね。