[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()で変換できるとリファレンスには書いてあるのだが... ちなみにこのSQLはOracle SQL*Plusなんかではスンナリと通ってしまうので一応カンバンに偽りなし?? うーむ。
ところで、
SELECT CAST(hoge as VARCHAR2(1000)) from ..
とかだとうまくいくみたい。ああ、でも微妙だ。VARCHAR2にキャストするようでは結局VARCHAR2におさまるような文字長のテキストデータしか扱えないことになってしまう。やはり
SELECT hoge from..
のままで Stringのプロパティにsetしてくれるハンドラの実装が必要なわけか。
でもまあ、to_char()の実装のほうがメチャクチャだと思うんだけど。
この話が結構ドハマリで、続きは こっちに書いてます…やれやれ、どうなってんだ!
CLOB猛者 ヘルプミー!