在Excel for DB2中使用UDF时,SQLSTATE=39501



我正试图将数据从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_imp150202_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_impARTIKEL_MATNR.ixf OF IXF MESSAGES C:excel_impmsg.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行长。

如果我只对函数返回的表进行选择,那么问题已经存在,所以甚至没有到达插入。

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

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

另请查看db2diag.log在出错时是否包含更多信息。

最新更新