2017-07-02 20 views
1

繰り返しの問題ですが、まだ適切な解決策が見つかりませんでした。基本的に私はビットの巨大なXMLすなわち32000 +文字をプロシージャを通してCLOB列に挿入しようとしています。次のエラーで挿入が失敗しているようです。DB2はCLOBデータ型ではなく文字列として入力を検討しています。何をする必要があるのか​​お勧めしますか? DB2でCLOBデータをDB2のCLOB定義列に格納できません

SP

CREATE OR REPLACE PROCEDURE logging (IN HEADERDATA CLOB(10M)) 
LANGUAGE SQL 
BEGIN 
    INSERT INTO Logging(Header) VALUES (HEADERDATA); 
    COMMIT; 
END 

エラー

The string constant beginning with 
"'<?xml version="1.0" encoding="UTF-8"?><XXXXXXXX xmlns:xsi="http:" is too long.. 
SQLCODE=-102, SQLSTATE=54002, DRIVER=XXXXXX 
+0

ストアドプロシージャの呼び出し方法を示してください。 – mustaccio

+0

CALLロギング( '<< 40000 char >>') – Som

+0

と、この無名ブロックをIBM data-studioで実行しています。 JFYI。 – Som

答えて

1

文字リテラルを、約32Kバイトに制限されています。より大きなLOBを処理するには、SQLリテラル値の使用を避ける必要があります。

これを行うには、[将来の] CLOBの内容をファイルに書き込んで、IMPORTまたはLOADを使用してその内容を列に挿入します。

また、大規模なXML文書を処理するためにPreparedStatement.setClob()を使用するプロシージャコールの周りに簡単なJavaプログラムをラップすることもできます。

+0

ありがとう、私はCALLログ( '?')のようなホスト変数で実行することができます。あなたが言ったようにJavaコードを試して元に戻します。 – Som

+0

それは動作します。ありがとう。 – Som

関連する問題