我想将.xlsx文件加载到Oracle数据库表中。我的代码出错了。我通常将此代码用于.csv文件,但需要将其用于.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 :(得分:1)
1)选项[Pure PL / SQL]
Xlsx文档是压缩的xml文档集。您可以将扩展名xlsx更改为zip,解压缩并找出其中的内容。 Here描述了如何在oracle环境中处理xlsx文档。 这个解决方案有效但实现非常痛苦。
2)选项(PL / SQL + apache POI) 在java中创建实现。并在db中使用它。
3)将xlxs转换为csv。
答案 1 :(得分:0)
您可能需要查看ExcelTable SQL界面(免责声明:我是作者)。
它提供对.xlsx(或.xlsm)文件的访问作为外部表。
这是一个基于你的ext表定义的例子:
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是某种自动生成的序列)