0

Excel から db2 データベースにデータを取得して、それを ixf にエクスポートしようとしています。

ソース(ddlファイル)はこちら

connect to MYDB

drop function ARTIKEL_MATNR;



CREATE FUNCTION ARTIKEL_MATNR()
RETURNS TABLE(Material VARCHAR(64), HerstellerteileNr VARCHAR(32), Hersteller VARCHAR(5))
LANGUAGE OLEDB
EXTERNAL NAME '![IH09_Material$]!Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\excel_imp\150202_Bestand_SASPF_GBP.xls; Extended Properties="Excel 8.0;HDR=YES"';



select count(*) FROM TABLE(ARTIKEL_MATNR()) AS T;

INSERT INTO QV_ARTIKEL_MATNR (MATNR, TKZ, HSTK)
SELECT SUBSTR(Material,1,64), SUBSTR(HerstellerteileNr,1,32), SUBSTR(Hersteller,1,5) FROM TABLE(ARTIKEL_MATNR()) AS T;

select count(*) from QV_ARTIKEL_MATNR;


EXPORT TO C:\excel_imp\ARTIKEL_MATNR.ixf OF IXF MESSAGES C:\excel_imp\msg.txt SELECT * FROM  QV_ARTIKEL_MATNR;

しかし、私は得る

SQL0450N Routine "scheme.ARTIKEL_MATNR" (specific name "SQL15020610250178") has generated a result
value, SQLSTATE value, message text, or scratchpad which is too long. SQLSTATE=39501 

プロトコルなどのすべてのバッファをすでに拡大しましたが、問題はまだ残っています。Excel ファイルの長さは約 190k 行です。

関数が返すテーブルでのみ選択を行うと、問題はすでに存在するため、挿入にも到達しません。

何か案は?事前にご協力いただきありがとうございます。

4

1 に答える 1

1

最初に確認することは、テーブル関数で宣言された列よりも長い値が Excel セルに含まれていないことです。列の長さは、文字数ではなくバイト数で指定されることに注意してください。Excel ファイルに非 ASCII 文字が含まれている場合、32 文字の文字列が 32 バイトより長くなる可能性があります。

またdb2diag.log、エラー時に詳細情報が含まれているかどうかも確認してください。

于 2015-02-06T13:46:37.570 に答える