2015-02-06 25 views
0

我想从Excel中获取数据到一个db2数据库,然后将其导出到ixf。SQLSTATE = 39501同时使用UDF和Excel的DB2

这里是源(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 

我已经扩大protocolls的所有缓冲区等等,但问题仍然存在。 Excel文件大约有19万行。

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

任何想法? 感谢您的所有帮助提前。

回答

1

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

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

+0

谢谢....这是一个价值,有一个“隐形”字符....再次感谢 – Thevagabond 2015-02-06 14:57:59