2012-10-09 67 views
0

我必须定期导入一些Excel数据。检查DB2 documentation可以通过外部函数直接访问OLE DB数据源。从DB2读取Excel

但是我无法正确设置它。我得到了Microsoft Access Database Enginge 2010加上修复包并将其安装在数据库服务器上。

我把excel文件放在数据库服务器的本地目录中。 (C:\Temp\test.xls

的Excel中有一个名为TEST1两行ABCDEF以下一些数字数据工作簿:

ABC | DEF 
--------- 
1 | 5 
2 | 6 
3 | 7 
4 | 8 

要创建我用下面的语句中的表功能:

CREATE OR REPLACE FUNCTION MYSCHEMA.test_excel() 
    RETURNS TABLE(ABC INTEGER, 
      DEF INTEGER) 
LANGUAGE OLEDB 
EXTERNAL NAME '!TEST1!Provider=Microsoft.ACE.OLEDB.12.0; 
     Data Source=C:\Temp\test.xls; 
    Extended Properties="Excel 8.0;HDR=Yes"'; 

它似乎创造了这个功能。然而,随着查询数据时:

SELECT * FROM TABLE(MYSCHEMA.test_excel()) AS FUNCTABLE; 

,我发现了以下错误:

User defined function "MYSCHEMA.TEST_EXCEL" received an OLE DB error from specified OLE DB provider. HRESULT="0x80040e37". Diagnostic text: "The Microsoft Access database engine".. SQLCODE=-1183, SQLSTATE=38506, DRIVER=3.53.71

按照documentation的错误意味着:0x80040E37 The specified table does not exist.

!TEST!应该引用该工作簿,但我不确定它是否是正确的语法。如何从DB2访问Excel工作表?有没有办法获得更详细的错误信息?有没有人有正确的命名方案?

回答

0

命名似乎不正确。看着其他oledb样本,我认为'$'丢失了。

!TEST$!在引用名为TEST的工作表时可以作为外部名称,我可以访问数据。