SQLSTATE=39501 同时将 UDF 与 Excel 一起用于 DB2

SQLSTATE=39501 while using UDF with Excel for DB2

我正在尝试从 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_imp0202_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 行。

如果我只对返回的函数执行 select table 问题就已经存在了,所以插入甚至都没有到达。

有什么想法吗? 感谢您提前提供的所有帮助。

首先要检查的可能是 Excel 单元格中的 none 包含的值比 table 函数中声明的列长。请记住,列长度以字节为单位指定,而不是字符。如果您的 Excel 文件包含非 ASCII 字符,则 32 个字符的字符串可能会超过 32 个字节。

另请参阅 db2diag.log 是否包含错误时的更多信息。