2015-02-06 10 views
0

Excel에서 데이터를 가져 와서 db2 데이터베이스로 가져 와서 ixf로 내보내려고합니다. 여기 DB2 용 Excel에서 UDF를 사용하는 중 SQLSTATE = 39501

내가 이미 protocolls의 모든 버퍼를 확대 등등하지만 문제는 여전히 남아있다

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 

를 얻을 그러나 소스 (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; 

입니다. Excel 파일의 길이는 약 190k입니다.

함수가 반환 한 테이블에서만 select를 수행하면 문제가 이미 있으므로 삽입에 도달하지 못합니다.

아이디어가 있으십니까? 미리 도움을 주셔서 감사합니다.

답변

1

첫 번째 사항은 Excel 함수에 표 함수에서 선언 된 열보다 긴 값이 포함되어 있지 않을 수 있습니다. 열 길이는 문자가 아닌 바이트 단위로 지정됩니다. Excel 파일에 ASCII가 아닌 문자가 포함되어 있으면 32 자 문자열이 32 바이트보다 길 수 있습니다.

db2diag.log에 오류 발생시 추가 정보가 포함되어 있는지 확인하십시오.

+0

감사합니다 .... "보이지 않는"문자가 하나 더있는 값이었습니다 .... 다시 한번 감사드립니다. – Thevagabond