2017-02-27 38 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是某種自動生成的序列)