こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

long型へのINSERTについて

はじめましてアオツキと申します。

わたしはシステム開発を行なっていて、JAVAとOracleを使用しています。

質問させていただきたい内容は、テーブルのLONG型項目にに対してINSERT文を発行したときに起こるエラーを回避する方法です。

insert into testtable (longstr) values ('*' ×10000文字)
を発行したところ「ORA-01704: 文字列リテラルが長すぎます 」
というエラーが発生しました。

このエラーを回避するため
http://www.shift-the-oracle.com/oerrs/ora-01704.html
上記のURLを参考にし10000文字を分割して

insert into testtable (longstr) values (TO_CLOB('*' ×3500文字) || TO_CLOB('*' ×3500文字) || TO_CLOB('*'×2000文字))

と分けてINSERT文を発行したのですが、
「ORA-22835: CLOBからCHAR、またはBLOBからRAWへの変換には、バッファーが小さすぎます(実際: 10503、最大: 4000)」
というエラーが発生しました。

このエラーについて
http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19212-01/e19400.htm
上記のURLの原因と処置を呼んだのですが意味が理解できませんでした。

どなたかテーブルに長文を登録する方法をご教授いただけないでしょうか?

ご回答お待ちしています。

開発環境
JAVA eclipse
SQL実行 eclipseプラグイン DBViewer
ORACLE 10g
OJDBCドライバ ojdbc14.jar

投稿日時 - 2008-07-11 18:59:36

QNo.4168789

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

5人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

こんにちは。

ご質問の内容ですが…。

誤:LONG 型
正: LONG ROW 型

ですね?。
…ま、それはおいといて、主訴は CHARにしろ VARCHAR2にしろ、大きな文字列情報を Oracle Lob 型に登録するには? と解釈致します。

結論は以下のサイトをごらん下さい。
Lob 型は手続きとOracle で提供されてるメソッド(関数)で行います。

ポイントは以下の3つ
(1)初期化
(2)getCLOB()
(3)getCharacterOutputStream()
ですね。

例題はテキストファイルの Insert ですが、色々試してみてください。

参考URL:http://oracle.se-free.com/jdbc/g4_clob_insert.html

投稿日時 - 2008-07-16 11:14:51

お礼

ご回答ありがとうございます。

使用していた型名はLONG型でLONG RAW型ではありません。
LONG型は文字型で2Gバイトまで情報を持つことができます。
LONG RAW型はバイナリ型で2Gバイトまで情報を持つことができます。
利用しているのは文字なのでLONG型を使用していたわけです。

また今回の質問内容について会社の先輩に聞いたところ解決できました。
型をLONGではなくCLOBという文字を4Gバイトまで持つ型に変えたところINSERTすることができました。

投稿日時 - 2008-07-17 14:43:21

あなたにオススメの質問