• 締切済み

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

  • Oracle
  • 回答数1
  • ありがとう数6

みんなの回答

  • 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

  • INSERT文の書式

    oracleに触るの初めてなのにストアドなんて書くことに・・ 助けを頂けたらと思います。 ストアドの中でですが・・・・ INSERT文の中ではテーブルの項目が2つ以上あるとき、 変数にその2つ以上分の値を文字列として入れておいて 、その値をINSERT文に流すことってできないのでしょう か? test_str := (' ''テスト1'' , ''テスト2'' '); insert into TestTable (test1 , test2 ) values (test_str); 上記のように書くと PL/SQL: ORA-00947: 値の個数が不足しています。 とのエラーが帰ってきます。 上記のように変数を使って下記のように解釈させたいのですが無理なのでしょうか? insert into TestTable (test1 , test2 ) values ('テスト1','テスト2'); それではお願いします。 失礼いたします。

  • CLOB型へのINSERT

    いつも参考にさせて頂いています。 まず、問題はCLOB型に4000Byte以上のデータを 格納出来なくて困っております。 環境は下記のとおりです。 OS:Windows2003 Oracleバージョン:9.0.1.4.0 テストした手順は (1)テーブル作成 create table TEST_TBL ( id number(9), data clob ); (2)INSERT insert into TEST_TBL values(1,'4000Byte以上のデータ'); ORA-01704: 文字列リテラルが長すぎます CLOBは4Gまで入るはずなのになぜなんでしょうか? ご回答よろしくお願いいたします。

  • 日付型カラムへのデータINSERT

    お世話になります。ひとつご教授ください。 オラクル10g, ojdbc14でjdk1.4.2から接続です。 INSERT命令を使ってテーブルにレコードを追加する際に、DATE型のカラムに対して INSERT TABLE_A (DATE1, ...) VALUES ('2006-4-27 12:00:00', ...); を実行するとエラーORA-01861が出ます。そこで INSERT TABLE_A (DATE1, ...) VALUES ('2006-4-27', ...); このように記述して再度実行すると通ります。 このようなとき、時間の部分まで設定した値をカラムに格納したいときはどうしたらよろしいでしょうか? よろしくお願いします。

  • Oracleでの現在時刻の取得

    Oracle超初心者です。 Oracle10gでDate型とTimeStamp型のカラムに 以下のように、それぞれ現在時刻をinsertしたいのですが、 知識が皆無なためやり方がわかりません。 insert into TESTTABLE values(?、?) この?に何を入れるべきかどなたかご教授くださいm(_ _)m

  • OracleのLONG型への insert について

    お世話になります。 ASP + Oracle8.0.5で開発中のシステムがあるのですが、 ASP上のテキストエリアに文章を記述して、OracleのテーブルのLONG型のカラムに対して insertを行うとエラーが起こってしまいます。 正しくは、全角で2000文字までは入力できるのですが、 それを越えてしまうと、ORA-01461エラー(LONG値はLONG列にのみバインドできます)という エラーが起こってしまい、カラムに対してinsertすることができません。 テーブルを見直してみたのですが、ちゃんとLONG型に設定してありました。 LONG型のカラムにデータを登録する際、4000バイト以上の文字列は挿入できないでしょうか? でもLONG型って、2GBまで使用できるはずでしたよね? ご教授のほど、よろしくおねがいします。

  • INSERT文(2)について

    お願い致します。 ORACLE9iを使用しています。 INSERT INTO tableA(AA,BB,CC,DD,・・・) VALUES (AA,BB,CC,DD・・・) ************************** 項目  長さ AA 11,3 BB 11,3 CC 11,3 ・ ・ ************************** 現在データ(VALUES句内部) AA→0.00000000まで ・ ・ *************************** 状態です。 SQL文上のINTO句とVALUES句の値の対応は取れています。 VALUES句が現在は少数点以下切捨てしてない状態な為、ORACLE項目の長さ以上に値が指定されているのですが、これが原因でエラーになっているのでしょうか? エラーメッセージ:「VALUESキーワードがありません」 お願い致します。

  • Oracle10.2.0.4 のDATE型へのインサートについて

    Oracle10.2.0.4 のDATE型へのインサートについて 例えば INSERT INTO テーブル名(DATE型の項目) values(TO_DATE('20100819','YYYYMMDD')) で追加した場合、時刻は何時で入るのですか? ご存知の方、教えて下さい! 宜しくお願い致します

  • PHP/MySQL INSERT文について。

    PHP/MySQL INSERT文について。 こんばんは。 PHP・MySQLでデータベースへデータの書き込みを試行錯誤しております。 そこで一つどうしても解決出来ない問題(謎)があるので質問させて頂きます。 簡易的な質問内容としては 全てのカラムに対する値の挿入は可能なのに カラムを指定して値を挿入しようとしたらエラーが出ます。 データベースの設定はテーブル名【TESTtable】 フィールド 種別 NULL 属性/その他 AAA int(6) No UNSIGNED ZEROFILL / auto_increment BBB int(4) Yes CCC int(4) Yes DDD int(4) Yes PHPでのSQL実行文をしてはの記述としては(値は全て可変で数値を代入します。) INSERT INTO TESTtable VALUES (last_insert_id(),50,600,50) とした場合は問題無くテーブルに書き込みされますが カラムを指定して INSERT INTO TESTtable (AAA,BBB,CCC,DDD) VALUES (last_insert_id(),50,600,50) とした場合、書き込みが行われません。 INSERT INTO TESTtable ('AAA','BBB','CCC','DDD') VALUES (last_insert_id(),50,600,50) INSERT INTO TESTtable (AAA,'BBB','CCC','DDD') VALUES (last_insert_id(),50,600,50) INSERT INTO TESTtable ('AAA','BBB','CCC','DDD') VALUES (last_insert_id(),'50','600','50') 等、色々試してみましたが不可能でした。 カラムAAAはauto_incrementにりますので毎回書き込みされますが BBB、CCC、DDDは書き込みが不要の場合もあるので カラム指定の書き込みは必須となるのですが・・・行き詰ってしまいました・・・。 ご教授頂ければ幸いです。 どうぞ、宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • MySQLへのINSERT

    JAVA Connection とPreparedStatement でMysqlへINSERT分を実行したいのですが、エラー が出力されます。 SELECT分だと正常に実行されるのですが。。。。どうしてでしょうか? ps = conn.prepareStatement(\" INSERT INTO test00 (data1) values (1)\")

    • ベストアンサー
    • Java
  • 多重insertについて

    お世話になります。 MySQLの経験はありますが、Oracleは初心者です。 Oracleで「多重insert」を行いたいと思っています。 この表現が正しいか分かりません、一度のinsert文で 多数のレコードを追加したいと思っております。 MySQLですと、 insert into XXXX values(X,'XX'),(X,'XXX'),(X,'XXX') のように、()と,で区切って一度の複数のレコードを インサートできますが、Oracleでは出来ませんでした。 Oracleで同様の動作を行う方法はあるのでしょうか? お手数をおかけ致しますが、よろしくお願い致します。