質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
INSERT

INSERTとは、行を追加する、コンピュータのデータベース言語SQLにおけるデータ操作言語(DML)ステートメントの1つである

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

DB2

DB2(IBM Database2)は、IBMのリレーショナルデータベース管理システム製品です。 UNIXとWindows、IBM社のメインフレームOS用が用意されており、 幅広いプラットフォームに対応しています。

Q&A

解決済

2回答

1317閲覧

db2のテーブルのCLOB型の項目にサイズが32672バイトを超える文字列データを登録したい。

kerryOpqr

総合スコア3

INSERT

INSERTとは、行を追加する、コンピュータのデータベース言語SQLにおけるデータ操作言語(DML)ステートメントの1つである

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

DB2

DB2(IBM Database2)は、IBMのリレーショナルデータベース管理システム製品です。 UNIXとWindows、IBM社のメインフレームOS用が用意されており、 幅広いプラットフォームに対応しています。

0グッド

0クリップ

投稿2023/09/25 05:43

実現したいこと

db2のテーブルのCLOB型の項目にサイズが32672バイトを超える文字列データを登録したい。

前提

使用DB:db2
SQLを発行してDBへの登録を行うプログラム言語:java言語

発生している問題・エラーメッセージ

db2のテーブルのCLOB型の項目にサイズが32672バイトを超える文字列データを登録しようとしたところ、以下のエラーが発生し登録できませんでした。
どうにか文字列を分割して該当の項目にデータを登録する方法などご存知ではないでしょうか?
※あまり詳細な情報を載せられなくてすいません。

java.sql.SQLException: "<登録する文字列>"で始まるストリング定数が長すぎます。 SQLCODE=-102 SQLSTATE=54002

補足

上記の「32672バイト」は
以下サイトの「SQL0102N」に32672バイトを超えていることが原因の旨の記載がありそこから持ってきました。
※実際に「32672バイト」は登録され「32673バイト」は上記のエラーで登録されない事を確認しております。

https://www.ibm.com/docs/ja/db2/11.1?topic=messages-sql0000-sql0249

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2023/09/25 07:45 編集

使用している java, DB2 や JDBC ドライバ、発生しているコード・SQL等、出来るだけ他人が同じ環境を用意して実行をすれば同じ現象が発生する(はずの)情報を質問に追加してください。
guest

回答2

0

自己解決

今回CLOBの項目にString型の文字列を登録しようとして今回のエラーが発生しておりましたが、
事前にjava側でClob型に変換して登録することで
32672バイトを超えていても無事登録できました。
※取得する時はClob型からStringに変換が必要ですが。

String value = 登録する文字列;
char[] buff = value.toCharArray();
Clob image = new SerialClob(buff);

投稿2023/09/25 08:43

kerryOpqr

総合スコア3

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

SQL0102N string で始まるストリング定数が長すぎます。

string で始まるストリング定数の長さが 32672 バイトを超えています。 32672 バイトを超える長さを持つ文字ストリング、 または 16336 文字を超える長さを持つ GRAPHIC ストリングは、 ホスト変数からの割り当てを通じてのみ指定することができます。 DB2 ファミリーの他のサーバーが、 文字ストリングに対して別のサイズ制限を指定している可能性があります。 詳細については、該当するデータベース製品のマニュアルをご覧ください。

上記のエラーに該当しているなら、説明にある通り、文字列そのものではなく、一旦ホスト変数に格納し、そのホスト変数を使用して登録すれば良い事になるかと思います。

また、ホスト変数ではなく、CLOB スカラー関数を使用する事で改善するかもしれません。

投稿2023/09/25 08:29

sazi

総合スコア25300

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kerryOpqr

2023/09/25 08:38

ご回答ありがとうございます。 本件自己解決しました。 今回CLOBの項目にString型の文字列を登録しようとして今回のエラーが発生しておりましたが、 事前にjava側でClob型に変換して登録することで無事登録できました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問