IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

利用sql load加载txt,csv及图片到数据库

信春哥,系统稳,闭眼上线不回滚 2012-05-15 23:44:18 累计浏览 3,130 次
本机暂存

朋友打电话问我如何利用sql讲mysl导出的文本数据加载到oracle数据库,电话说了他也没听清楚,我给他做了几个例子:
一、加载txt文本
1.在D盘建立sqlldr的控制文件,111.ctl 内容如下

LOAD DATA
INFILE 'd:\111.txt'
INTO TABLE SALGRADE_TEST
TRUNCATE
FIELDS TERMINATED BY ','
(GRADE,LOSAL,HISAL)

2.在D盘建立sqlldr的数据文件111.txt,内容如下格式

1,700,1200
2,1201,1400
3,1401,2000
4,2001,3000
5,3001,9999

3.在CMD的命令行模式执行加载操作

sqlldr scott/tiger control=d:\111.ctl log=d:\111.log bad=d:\111.ba
SQL*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
达到提交点 - 逻辑记录计数 5

4.登录数据库验证加载结果

D:\window\server\mysql-5.1.51\bin> sqlplus scott/tiger
连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select * from SALGRADE_TEST;
GRADE LOSAL HISAL
---------- ---------- ----------
1 700 1200
2 1201 1400
3 1401 2000
4 2001 3000
5 3001 9999

5.导入成功之后,查看111.log
6.注释

LOAD DATA 控制文件标识
INFILE 'd:\111.txt'为数据文件地址和名称,此处如果是INFILE *表示要加载的数据就在
这个控制文件里,也就是BEGINDATA后面跟的内容。详见7
INTO 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 DATA
INFILE 'd:\111.txt'
TRUNCATE
INTO 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 DATA
INFILE *
TRUNCATE
INTO TABLE SALGRADE_TEST
FIELDS TERMINATED BY ','
(GRADE,LOSAL,HISAL)
BEGINDATA
1,700,1200
2,1201,1400
3,1401,2000
4,2001,3000
5,3001,9999

加载

D:\>sqlldr scott/tiger control=d:\111.ctl
SQL*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 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> SELECT * FROM SALGRADE_TEST;
GRADE LOSAL HISAL
---------- ---------- ----------
1 700 1200
2 1201 1400
3 1401 2000
4 2001 3000
5 3001 9999

二、加载csv格式的数据
1.建立测试表

D:\>sqlplus scott/tiger
连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With 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,内容如下

10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON

3.建立sqlload的控制文件111.ctl,内容如下

LOAD DATA
INFILE 'd:\111.csv'
TRUNCATE
INTO TABLE DEPT_TEST
FIELDS TERMINATED BY ','
(DEPTNO,DNAME,LOC)

4.执行加载操作

D:\>sqlldr scott/tiger control=d:\111.ctl log=d:\111.log
SQL*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.
达到提交点 - 逻辑记录计数 4

5.登录数据库查询

D:\> sqlplus scott/tiger
连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select * from dept_test;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 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.JPG
2,DSC00122.JPG
3,DSC00145.JPG
4,DSC00146.JPG
5,psu.jpg

3.创建sqlload的控制文件111.ctl,内容如下:

LOAD DATA
INFILE '111.txt'
INTO TABLE T_LOAD_SF
TRUNCATE
FIELDS 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.log
SQL*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.
达到提交点 - 逻辑记录计数 5

5.登录数据库验证

SQL> select * from t_load_sf where rownum=1;
ID FULL_NAME CREATE_DATE CONTENTS
-------- --------------- -------------- -----------------------------------
1 DSC00086.JPG 15-9月 -11 FFD8FFE1538045786966000049492A00080
000000B000E01020020000000920000000F
01020005000000B20000001001020008000
000B8000000120103000100000001000000
1A01050001000000C000

如果使用plsqldev工具,可以看到加载进数据库的图片
原图已失效

同分类推荐文章

  1. 第七章 事务 (2026-04-07 08:00:00)
  2. 第六章:分区 (2026-03-29 08:00:00)
  3. Neko Master: 从 0 到 1K+ Star 的 Vibe Coding 实践 (2026-03-01 08:00:00)

查看更多 数据库 文章 →

建议继续学习

  1. Oracle MTS模式下 进程地址与会话信息 (累计阅读 14,323)
  2. 那些在11gR2中可能惹祸的新特性,一张列表帮助你摆脱升级11gR2带来的烦恼 (累计阅读 6,841)
  3. 性能测试工具sysbench简介 (累计阅读 5,972)
  4. 大于2GB的Listener.log和运行超过198天的主机上的Oracle实例 (累计阅读 5,814)
  5. 仅仅只备份是不够的 (累计阅读 5,771)
  6. ORACLE最大可以存储多少数据量 (累计阅读 5,685)
  7. Oracle Database 12c 新特性 - Native Top N 查询 (累计阅读 5,695)
  8. Oracle DBA的学习进阶成长树-从初出茅庐到高瞻远瞩 (累计阅读 5,543)
  9. 老托的Oracle 数据库Patch概念性小常识 (累计阅读 5,485)
  10. 查看oracle数据库用户下的所有空表 (累计阅读 5,456)