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
是否包含错误时的更多信息。
我正在尝试从 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
是否包含错误时的更多信息。