• 締切済み

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

みんなの回答

  • Go_Ahead
  • ベストアンサー率67% (21/31)
回答No.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
aotuki001
質問者

お礼

ご回答ありがとうございます。 使用していた型名はLONG型でLONG RAW型ではありません。 LONG型は文字型で2Gバイトまで情報を持つことができます。 LONG RAW型はバイナリ型で2Gバイトまで情報を持つことができます。 利用しているのは文字なのでLONG型を使用していたわけです。 また今回の質問内容について会社の先輩に聞いたところ解決できました。 型をLONGではなくCLOBという文字を4Gバイトまで持つ型に変えたところINSERTすることができました。

関連するQ&A

専門家に質問してみよう