2017-02-27 41 views
0

我正在将一个.xlsx文件加载到Oracle数据库表中。我的代码出现错误。我通常使用此代码的.csv文件,但需要使用它的.xlsx我已编辑我的字段名称,表名称等 这可能吗?Oracle Loader for .xlsx文件

Drop TABLE Temp_Info; 
     CREATE TABLE Temp_Info 
          (
          Unique_Id varchar2(255) , 
          Name varchar2(255), 
          Alt_Name varchar2(255) 
          ) 
      ORGANIZATION EXTERNAL 
      ( 
       TYPE ORACLE_LOADER 
       DEFAULT DIRECTORY SEPA_FILES 
       ACCESS PARAMETERS 
       ( 
       records delimited by newline 
       skip 1 
       fields terminated by ',' 
       missing field values are null 
       ( 
        Unique ID -(filled automatically),Name,Alt Name 
       ) 
       ) 
       LOCATION ('Data_File.xlsx') 
      ) 
      REJECT LIMIT UNLIMITED; 

Select * From Temp_Info a;

Error Message: 9:16:55 ORA-29913: error in executing ODCIEXTTABLEOPEN callout 
9:16:55 ORA-29400: data cartridge error 
9:16:55 KUP-00554: error encountered while parsing access parameters 
9:16:55 KUP-01005: syntax error: found "identifier": expecting one of: "comma, char, date, defaultif, decimal, double, float, integer, (, nullif, oracle_date, oracle_number, position, raw, recnum,), unsigned, varrawc, varchar, varraw, varcharc, zoned" 
9:16:55 KUP-01008: the bad identifier was: ID 
9:16:55 KUP-01007: at line 6 column 30 
9:16:55 ORA-06512: at "SYS.ORACLE_LOADER", line 14 
9:16:55 ORA-06 
+0

这是一个.xlsx文件?我不能真的发布数据(数据隐私) –

+1

哦,它的'.xlsx'文件。我认为这种文件格式不被Oracle支持。你需要有'.csv'文件。 – JSapkota

+0

是否有任何替代解决方案.xlsx? –

回答

1

1)选项[纯PL/SQL]

XLSX文档被压缩的XML文件的集合。您可以将扩展名xlsx更改为zip,解压缩并找出内部的内容。 Here是如何在oracle环境下处理xlsx文件的。 该解决方案可行,但实施非常痛苦。

2)选项(PL/SQL + apache POI) 在java中创建实现。并在数据库中使用它。

3)将xlxs转换为csv。

+0

谢谢,看看选项2. http://www.oracle.com/technetwork/articles/saternos-tables-090560.html我知道要更改bat文件中的文件名。你知道还有哪些地方需要修改附加文件夹吗? –

+0

你问'load_dir AS'C:\ workspaces \ test \ XL2ExternalTables''吗? –

0

您可能想看看ExcelTable SQL接口(免责声明:我是作者)。
它提供对作为外部表的.xlsx(或.xlsm)文件的访问。

这是基于你的分机表定义的例子:

SELECT t.* 
FROM TABLE(
     ExcelTable.getRows(
     ExcelTable.getFile('SEPA_FILES','Data_File.xlsx') 
     , 'Sheet_name_goes_here'  
     , ' "UNIQUE_ID" for ordinality 
     , "NAME"  varchar2(255) 
     , "ALT_NAME" varchar2(255) ' 
     , 'A2' 
     ) 
    ) t ; 

(我假定UNIQUE_ID是某种自动生成的序列)