カスタム検索

2008年3月3日月曜日

OracleとCLOBとGrailsと

OracleのCLOB型はデフォルトでDISTINCT出来なくなっています(パフォーマンスの問題?)
なのでGrailsからクエリを直接実行しようとした場合は注意が必要です。
DISTINCTしなければいいのかというと、そういうわけでもなく、 like は使えるが = は使えないという非常に微妙な状態になります。(Oracle8ではlikeもNGっぽいです)
以下にテストした結果、OKなケースとNGなケースをまとめます。

以下の形のドメインクラス

class Book {
Author author
String title
}


class Author {
static mapping = {
clob type:'text'
}

String clob
}


以下のクエリを実行します。

SELECT DISTINCT a from Author as a // NG

from Author as a WHERE a.clob like '%Clob%' // OK

from Author as a WHERE a.clob = '%Clob%' // NG

SELECT DISTINCT b from Book as b WHERE b.author.clob like '%Clob%' // OK

SELECT DISTINCT b from Book as b WHERE b.author.clob = 'Clob' // NG


Oracleが嫌いになりました :p

0 件のコメント: