OracleのClob型データをJavaのプログラムから操作する.
under construction...
Oracleで文字列を扱うというと,VARCHAR2が一般的(だと思う)が,VARCHAR2は4000文字までという制限がある.(9iの場合.)
しかも,日本語を扱うとなると,NLS?NSL?比みたいのが問題になるらしく,1300字くらいまでしか扱えない.
そこで,CLOBというデータ型を使う.
OracleにはLOB(Large OBject)というデータ型としてCLOBとBLOBがあり,どちらも大きいデータを扱う.
CLOBはCharacterLOB,つまり文字データ.
BLOBはBinaryLOB.画像なんかも扱えるらしい.
[LONG型との比較.]
CLOBと同じように,長い文字列を扱えるデータ型としてLONG型がある.
Oracleとしては,CLOBを扱うことを薦めている.
ということは,これからバージョンが進むにつれてLONGは対象外になる可能性がある.
また,LONGはひとつのテーブルに対して1列にしか使えない.
複数の行に,長文字列を使いたい場合には,LONGは使えない.
[CLOBの不便なところ]
文字列をオブジェクトとして扱うためか,検索の条件にすることが出来ない.
where句で比較することができない.
select * from table_name where where clob_column = xxxx
なんてのは不可.
[Selectでとってくる]
[Insertで新規登録]
[Updateで更新]
insertは普通に出来るのに,なぜかupdateがうまく出来ない.
正確に言うと,860文字以上くらいをupdateしようとすると失敗する.
それを回避するために考えた苦肉の策.
おおまかな流れとしては,
[既存のテーブルの列を,VARCHARからCLOBに変える(列のデータを消してもいい場合)]
基本的に,テーブルのデータ型というのは,その列が全てNULL出ないと変更できない.
別にデータを消してもいいという場合は,変更はとても簡単.
update テーブル名 set 列名 = ''
で,変更したい列のデータを全て空白にして,
alter table テーブル名 modify 列名 long
alter table テーブル名 modify 列名 clob
[既存のテーブルの列を,VARCHARからCLOBに変える(列のデータを消すのは困る場合)]
前述したように,テーブルのデータ型は,変更対象の列が全てNULLでないと変更できない.
しかしやっぱり,DBなんて動いてるシステムの履歴とったりっていう用途で使っていることが多いので,消せないことが多い.
なので,しょうがないので,テーブルのデータ型を変換するためのプログラムを書いて,それで変換する.
大体の流れとしては,