朋友打电话问我如何利用sql讲mysl导出的文本数据加载到oracle数据库,电话说了他也没听清楚,我做了如下实验,给他做例子:一、加载txt文本1.在D盘建立sqlldr的控制文件,111.ctl 内容如下LOAD DATAINFILE 'd:\111.txt'INTO TABLE SALGRADE_TESTTRUNCATEFIELDS TERMINATED BY ','(GRADE,LOSAL,HISAL)2.在D盘建立sqlldr的数据文件111.txt,内容如下格式1,700,12002,1201,14003,1401,20004,2001,30005,3001,99993.在CMD的命令行模式执行加载操作sqlldr scott/tiger control=d:\111.ctl log=d:\111.log bad=d:\111.baSQL*Loader: Release 11.2.0.1.0 - Production on 星期三 9月 14 10:58:35 2011 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved达到提交点 - 逻辑记录计数 4达到提交点 - 逻辑记录计数 54.登录数据库验证加载结果D:\window\server\mysql-5.1.51\bin>sqlplus scott/tiger连接到:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> select * from SALGRADE_TEST;GRADE LOSAL HISAL---------- ---------- ----------1 700 12002 1201 14003 1401 20004 2001 30005 3001 99995.导入成功之后,查看111.log6.注释LOAD DATA 控制文件标识INFILE 'd:\111.txt'为数据文件地址和名称,此处如果是INFILE *表示要加载的数据就在这个控制文件里,也就是BEGINDATA后面跟的内容。
详见7INTO TABLE SALGRADE_TEST要往SALGRADE_TEST表里加载数据TRUNCATE如果表里有数据,先truncate表,然后再加载,TRUNCATE还可换成其他值,比如insert,为缺省方式,在数据装载开始时要求表为空,如果表中有数据,会报错而终止。
SQL*Loader-601: 对于 INSERT 选项, 表必须为空。
表 SALGRADE_TEST 上出错append,在表中追加新记录,如果。
表上有主键和唯一性约束,新加载的数据的相关字段值不能重复replace,删除旧记录,替换成新装载的记录,要求有delete权限truncate,同上,要求有truncate权限FIELDS TERMINATED BY ',' 数据以逗号分隔,如果是TERMINATED BY WRITESPACE表示以空白分隔,如果不指定FIELDS TERMINATED BY ',',需要为每一列都指定分隔符,如下:(GRADE[interger external] TERMINATED BY ',',LOSAL [interger external] TERMINATED BY ',',HISAL [interger external] TERMINATED BY ',')例如:LOAD DATAINFILE 'd:\111.txt'TRUNCATEINTO TABLE SALGRADE_TEST(GRADE TERMINATED BY ',',LOSAL TERMINATED BY ',',HISAL TERMINATED BY ',')(GRADE,LOSAL,HISAL) 要加载到表中的这些字段,字段顺序需要和数据文件111.txt内的数据对应,如果单独为每一列都指定了分隔符,此部分就不需要了。
7.如果数据量不大,可以讲sqlload的数据文件(111.txt)集成到sqlload的控制文件(111.ctl)内,例如:LOAD DATAINFILE *TRUNCATEINTO TABLE SALGRADE_TESTFIELDS TERMINATED BY ','(GRADE,LOSAL,HISAL)BEGINDATA1,700,12002,1201,14003,1401,20004,2001,30005,3001,9999加载D:\>sqlldr scott/tiger control=d:\111.ctlSQL*Loader: Release 11.2.0.1.0 - Production on 星期三 9月 14 17:03:53 2011 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. 达到提交点 - 逻辑记录计数 4达到提交点 - 逻辑记录计数 5登录数据库验证加载结果D:\>sqlplus scott/tiger连接到:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> SELECT * FROM SALGRADE_TEST;GRADE LOSAL HISAL---------- ---------- ----------1 700 12002 1201 14003 1401 20004 2001 30005 3001 9999二、加载csv格式的数据1.建立测试表D:\>sqlplus scott/tiger连接到:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 – ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> create table dept_test as select * from dept where 1=2;表已创建。
2.建立sqlload的数据文件111.csv,内容如下3.建立sqlload的控制文件111.ctl,内容如下LOAD DATAINFILE 'd:\111.csv'TRUNCATEINTO TABLE DEPT_TESTFIELDS TERMINATED BY ','(DEPTNO,DNAME,LOC)4.执行加载操作D:\>sqlldr scott/tiger control=d:\111.ctl log=d:\111.logSQL*Loader: Release 11.2.0.1.0 - Production on 星期四 9月 15 09:47:44 2011 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. 达到提交点 - 逻辑记录计数 45.登录数据库查询D:\>sqlplus scott/tiger连接到:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 – ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> select * from dept_test;DEPTNO DNAME LOC---------- -------------- -------------10 ACCOUNTING NEW YORK20 RESEARCH DALLAS30 SALES CHICAGO40 OPERATIONS BOSTON三、加载图片到数据库1.创建测试表,由于图片在数据库中以blob的形式保存,这里是有了11g的新特性,securefiles LOB的形式存储图片。
SQL> create table t_load_sf (id number, full_name varchar2(100),2 create_date date, contents blob, constraint pk_t_load_sf primary key(id))3 lob (contents) store as securefile;表已创建。
2.创建sqlload的数据文件111.txt,内容如下:1,DSC00086.JPG2,DSC00122.JPG3,DSC00145.JPG4,DSC00146.JPG5,psu.jpg3.创建sqlload的控制文件111.ctl,内容如下:LOAD DATAINFILE '111.txt'INTO TABLE T_LOAD_SFTRUNCATEFIELDS TERMINATED BY ','(ID CHAR(255),FULL_NAME CHAR(255),CREATE_DATE SYSDATE,CONTENTS LOBFILE(FULL_NAME) TERMINATED BY EOF)4.加载D:\test>sqlldr scott/tiger control=D:\111.ctl log=d:\111.logSQL*Loader: Release 11.2.0.1.0 - Production on 星期四 9月 15 11:29:13 2011 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. 达到提交点 - 逻辑记录计数 55.登录数据库验证SQL> select * from t_load_sf where rownum=1;ID FULL_NAME CREATE_DATE CONTENTS-------- --------------- -------------- -----------------------------------1 DSC00086.JPG 15-9月 -11 FFD8FFE1538045786966000049492A00080000000B000E01020020000000920000000F01020005000000B20000001001020008000000B80000001201030001000000010000001A01050001000000C000如果使用plsqldev工具,可以看到加载进数据库的图片。