如何使用INSERT INTO SQL语句将数据从Excel文件插入Oracle?

我已经使用Oracle对象创build了types,并创build了一个表

CREATE OR REPLACE TYPE OttawaAddress_Ty AS OBJECT (StrtNum NUMBER(9), Street VARCHAR2(20), City VARCHAR2(15), Province CHAR(2), PostalCode CHAR(7)); / CREATE OR REPLACE TYPE OttawaOfficesInfo_Ty AS OBJECT (Name VARCHAR(35), OfficeID VARCHAR2(2), Phone VARCHAR2(15), Fax CHAR(15), Email CHAR(30)); / CREATE TABLE OttawaOffices (OfficeAddress OttawaAddress_Ty, OfficeInfo OttawaOfficesInfo_Ty, Longitude_DMS NUMBER (10,7), Latitude_DMS NUMBER (10,7), SDO_GEOMETRY MDSYS.SDO_GEOMETRY); 

我有一个Excel文件,其中包含数据,我需要使用INSERT INTO SQL语句导入到这个Oracle表。 我怎样才能做到这一点? 您可以注意到,我有一个名为SDO_GEOMETRY的列,它将保存logging的十进制度数。 这些十进制度被保存在Excel文件的两个单独的列中。

我不知道如果我可以插入Excel的值有问题,或者我是否需要通过每个logging,并创buildINSERT INTO … VALUES ….如果是这样,当我创buildtypes时如何添加值?

甲骨文有一个非常整洁的function称为外部表。 这些看起来像数据库中的常规表,所以我们可以对它们执行SELECT语句。 诀窍是表格的数据从操作系统文件(因此“外部”)。 我们只是将表定义为与电子表格的列相同的结构。 它不适用于Excel二进制格式,但它适用于CSV文件(所以Save as ... )。

外部表的优点是在SQL中操作数据非常简单 – 它就是最好的 – 我们不需要将任何东西加载到临时表中。 就像是

 insert into OttawaOffices select ottawaaddress_ty(ext.strtnum,ext.street,ext.city,ext.province,ext.postalcode) , ottawaofficesinfo_ty (ext.name,ext.officeid,ext.phone,ext.fax,ext.email) , ext.longitude , ext.latitude , SDO_GEOMETRY MDSYS.SDO_GEOMETRY(ext.col1, ext.col2) from your_external_table ext / 

外部表的限制是需要将源文件放到数据库服务器上,并创build一个数据库目录对象。 有些地方对此很有趣。

无论如何, 了解更多 。


我不会判断声明表列作为用户定义的types。 这通常被认为是不好的做法,但也许它在你的用例。