- PR -

JDBCでのSQL発行

1
投稿者投稿内容
ヒーロー
会議室デビュー日: 2005/03/17
投稿数: 12
投稿日時: 2005-04-20 10:56
いつもお世話になっております。

JDBCでoracle9iで接続しているのですが、
updateを


PreparedStatement preparedStatement = null;
preparedStatement = con.prepareStatement(SQL文);
preparedStatement.executeUpdate();
で行うと
java.sql.SQLException: ORA-22295: 4000バイトを超えるデータは、1つの文でLOBおよびLONG列にバインドできません。
というエラーがでます。

原因はSQL文が4000バイトを超えているのだと推測できるのですが、
どうしても4000バイト超えてしまうSQL文なのでどうしていいか困っています。。
どなたかいい対策があれば教えてください。
なっかむ
常連さん
会議室デビュー日: 2002/12/26
投稿数: 29
投稿日時: 2005-04-20 12:15
引用:

原因はSQL文が4000バイトを超えているのだと推測できるのですが、
どうしても4000バイト超えてしまうSQL文なのでどうしていいか困っています。。
どなたかいい対策があれば教えてください。



私の場合、カラムを分割して、保存する方法を採用しました。
保存するときは、対象文字列を2000Byte毎に分割して
保存するという面倒な処理が入りますが。

big_col varchar2(6000)

col1 varchar2(2000)
col2 varchar2(2000)
col3 varchar2(2000)

こんな感じ。

もしくは、BLOB等のデータ型を使用してもいいのではないでしょうか。
Gio
ぬし
会議室デビュー日: 2003/11/28
投稿数: 350
お住まい・勤務地: 都内から横浜の間に少量発生中
投稿日時: 2005-04-21 10:47
直接の回答ではないのですが。

ヒーローさんの投稿内容からは、どうしても(明示されていない)SQL文の文字列としての長さが 4000 文字を越えているとしか読めません。

DB に関係するご質問の場合は、SQL 文そのものの明示と、参照/更新対象となるテーブルの構造を書かれることを、強くお奨めします。

ここでようやく本題です
なっかむさんが回答されたことですし、既にご存知と思いますが、Oracle 9i では char で 2000 バイト、varchar で 4000 文字(バイトと文字を区別して扱っていることにご注意ください)しか格納できません。
これを越えるサイズであれば、テキストならば CLOB、バイナリを含むなら BLOB 型を使うのが自然であると考えます。

回避策としてなっかむさんの挙げられた分割もありますが、本質的でない分割・結合処理が入り込んでしまうので、私はお奨めしません。
1

スキルアップ/キャリアアップ(JOB@IT)