[Seasar][Java][Oracle] CLOB列に対するTO_CHAR()の扱い

軽く調べてみたところ CLOB列 hoge があるとして

SELECT hoge from ..

は ResultSet#getObject()に対して Clobかなにかを返してくる。これはこれで扱える。でもまあ、たとえばDTO上はStringで、S2Dao(S2JDBCというほうがこのケースでは正しいか)にセットしてもらおうとするとうまくいかない。nullで放置されるわけです。じゃあ…

SELECT TO_CHAR(hoge) from ...

これ、なんと「ORA-.... プロトコル違反です」なんてメッセージが出てくる。どないやねん。ところで Common SQL Environmentで同じのを走らせるとやっぱり似たようなエラーが出てくる。CLOB列はTO_CHAR()で変換できるとリファレンスには書いてあるのだが... ちなみにこのSQLOracle SQL*Plusなんかではスンナリと通ってしまうので一応カンバンに偽りなし?? うーむ。
ところで、

SELECT CAST(hoge as VARCHAR2(1000)) from ..

とかだとうまくいくみたい。ああ、でも微妙だ。VARCHAR2にキャストするようでは結局VARCHAR2におさまるような文字長のテキストデータしか扱えないことになってしまう。やはり

SELECT hoge from..

のままで Stringのプロパティにsetしてくれるハンドラの実装が必要なわけか。

でもまあ、to_char()の実装のほうがメチャクチャだと思うんだけど。



この話が結構ドハマリで、続きは こっちに書いてます…やれやれ、どうなってんだ!

CLOB猛者 ヘルプミー!