Oracle 导入XLS(CSV)文件总结

今天做jira的时候需要把一个xls文件到数据库。导入完成后将过程记录下来,做个备注。

要导入的文件只有一列,不算复杂。数据表也只有一个字段。我们先使用了Oracle的 sql loader工具导入。

数据库表结构信息如下:

SQL> desc prod_data2.OPEN_SALE_AREAS_PRODUCT_TEMP;

Name                                               Null?    Type

—————————————– ——– —————————-

PRODUCT_CODE                                       NOT NULL VARCHAR2(10)

 

1.首先我们需要把xls文件转换为csv文件。用office打开后另存为csv即可。

2.创建sql loader控制文件load.ctl,文件内容如下。

$ cat load.ctl

Load data

Infile ‘/tmp/OPEN_SALE_AREAS_PRODUCT_TEMP.csv’

insert Into table prod_data2.OPEN_SALE_AREAS_PRODUCT_TEMP  Fields terminated by ‘,’ (PRODUCT_CODE)

3.将需要导入的csv文件传到服务器对应位置,即/tmp目录下。

4.执行导入命令

$ sqlldr userid=prod_data2/password control=’/tmp/load.ctl’ log=’/tmp/load.log’

导入后发现数据表里没有数据,所以看了下日志文件发现有以下错误信息,意思是字段长度不够,需要11位:

Record 1: Rejected – Error on table PROD_DATA2.OPEN_SALE_AREAS_PRODUCT_TEMP, column PRODUCT_CODE.

ORA-12899: value too large for column “PROD_DATA2″.”OPEN_SALE_AREAS_PRODUCT_TEMP”.”PRODUCT_CODE” (actual: 11, maximum: 10)

随即增加该字段的长度

SQL> alter table prod_data2.OPEN_SALE_AREAS_PRODUCT_TEMP modify PRODUCT_CODE VARCHAR2(11);

Table altered.

然后再次导入,导入成功。

$ sqlldr userid=prod_data2/password control=’/tmp/load.ctl’ log=’/tmp/load.log’

SQL> select count(*) from prod_data2.OPEN_SALE_AREAS_PRODUCT_TEMP;

COUNT(*)

———-

5128

SQL>

然而事情并没有想象的那么简单。开发随后找来说这个表的字段和其他表关联后查不到数据。即使是单表查询,例如如下语句也无法查询出结果

select * from PROD_DATA2.OPEN_SALE_AREAS_PRODUCT_TEMP where PRODUCT_CODE=’0172180619′;

如果使用如下like语句则可以查询到数据

select * from PROD_DATA2.OPEN_SALE_AREAS_PRODUCT_TEMP where PRODUCT_CODE like ‘0172180619%’;

我们得出结论在用sql loader导入数据时后面多了位特殊字符。这也是导入的数据只有10位,但是需要VARCHAR2(11)才可以导入的原因。也就是说VARCHAR2(10)是够用的,但是无法导入,需要VARCHAR2(11)才可以导入。

对sql loader用的不熟悉,也没有找到这个多于的特殊字符,最后用了另外一个工具(OraLoader)搞定了。这个工具使用还是比较方便的。直接双击运行后通过监听连接数据库。然后选择文件和要导入的表即可。可以导入txt,csv等格式内容。我们这次是导入的是txt格式,先把上面那个xls文件里的列复制到txt里面保存成txt文件,再导入即可。导入后发现一切都OK。

附上使用方法:

先打开工具,通过监听连接数据库

sqlload1

 

选择整理好的txt或csv文件。选择导入的表。点击load即可完成导入,非常方便。

oraloader

 

最后附上OraLoader的下载地址。已上传到本服务器,请大家放心下载。

OraLoader

共有 0 条评论

Top