1.控制文件中包含要加载的数据首先创建一张测试表
- SQL> show user
- USER 为 "ING"
- SQL> create table dept
- 2 (deptno number(10) constraint dept_pk primary key,
- 3 dname varchar2(20),
- 4 loc varchar2(20));
-
- 表已创建。
然后创建一个控制文件(其中包含被加载的数据)
- [Oracle@linux sqlldr]$ pwd
- /u01/sqlldr
- [oracle@linux sqlldr]$ cat demo1.ctl
- LOAD DATA
- INFILE *
- INTO TABLE DEPT
- FIELDS TERMINATED BY ","
- (DEPTNO,DNAME,LOC)
- BEGINDATA
- 10,Sales,Virginia
- 20,Accounting,Virginia
- 30,Consulting,Virginia
- 40,Finance,Virginia
然后在命令行执行加载
- [oracle@linux sqlldr]$ pwd
- /u01/sqlldr
- [oracle@linux sqlldr]$ sqlldr userid=ing/ing control=demo1.ctl log=demo1.log
-
- SQL*Loader: Release 10.2.0.4.0 - Production on 星期二 10月 4 18:39:54 2011
-
- Copyright (c) 1982, 2007, Oracle. All rights reserved.
-
- 达到提交点 - 逻辑记录计数 4
查看dept表
- SQL> select * from dept;
-
- DEPTNO DNAME LOC
- ---------- -------------------- --------------------
- 10 Sales Virginia
- 20 Accounting Virginia
- 30 Consulting Virginia
- 40 Finance Virginia
查看demo1.log日志文件
- [oracle@linux sqlldr]$ pwd
- /u01/sqlldr
- [oracle@linux sqlldr]$ cat demo1.log
-
- SQL*Loader: Release 10.2.0.4.0 - Production on 星期二 10月 4 18:39:54 2011
-
- Copyright (c) 1982, 2007, Oracle. All rights reserved.
-
- 控制文件: demo1.ctl
- 数据文件: demo1.ctl
- 错误文件: demo1.bad
- 废弃文件: 未作指定
-
- (可废弃所有记录)
-
- 要加载的数: ALL
- 要跳过的数: 0
- 允许的错误: 50
- 绑定数组: 64 行, 最大 256000 字节
- 继续: 未作指定
- 所用路径: 常规
-
- 表 DEPT,已加载从每个逻辑记录
- 插入选项对此表 INSERT 生效
-
- 列名 位置 长度 中止 包装数据类型
- ------------------------------ ---------- ----- ---- ---- ---------------------
- DEPTNO FIRST * , CHARACTER
- DNAME NEXT * , CHARACTER
- LOC NEXT * , CHARACTER
-
-
- 表 DEPT:
- 4 行 加载成功。
- 由于数据错误, 0 行 没有加载。
- 由于所有 WHEN 子句失败, 0 行 没有加载。
- 由于所有字段都为空的, 0 行 没有加载。
-
-
- 为绑定数组分配的空间: 49536 字节 (64 行)
- 读取 缓冲区字节数: 1048576
-
- 跳过的逻辑记录总数: 0
- 读取的逻辑记录总数: 4
- 拒绝的逻辑记录总数: 0
- 废弃的逻辑记录总数: 0
-
- 从 星期二 10月 04 18:39:54 2011 开始运行
- 在 星期二 10月 04 18:39:54 2011 处运行结束
-
- 经过时间为: 00: 00: 00.68
- CPU 时间为: 00: 00: 00.07
2.控制文件和数据文件分开继续使用前面的dept表,首先创建一个控制文件和一个数据文件
- [oracle@linux sqlldr]$ pwd
- /u01/sqlldr
- [oracle@linux sqlldr]$ cat demo2.ctl
- load data
- infile demo2.data
- append into table dept
- fields terminated by ","
- (deptno,dname,loc)
- [oracle@linux sqlldr]$ cat demo2.data
- 50,Sales,Virginia
- 60,Accounting,Virginia
- 70,Consulting,Virginia
- 80,Finance,Virginia
然后在命令行执行加载
- [oracle@linux sqlldr]$ sqlldr userid=ing/ing control=demo2.ctl
-
- SQL*Loader: Release 10.2.0.4.0 - Production on 星期二 10月 4 18:47:23 2011
-
- Copyright (c) 1982, 2007, Oracle. All rights reserved.
-
- 达到提交点 - 逻辑记录计数 4
最后查看dept表
- SQL> select * from dept;
-
- DEPTNO DNAME LOC
- ---------- -------------------- --------------------
- 10 Sales Virginia
- 20 Accounting Virginia
- 30 Consulting Virginia
- 40 Finance Virginia
- 50 Sales Virginia
- 60 Accounting Virginia
- 70 Consulting Virginia
- 80 Finance Virginia
-
- 已选择8行。
3.sql*loader简要说明注意:下面代码左边加括号的数并不是控制文件的一部分,只是为了方便显示。(1)LOAD DATA
(2)INFILE *
(3)INTO TABLE DEPT
(4)FIELDS TERMINATED BY ","
(5)(DEPTNO,DNAME,LOC)
(6)BEGINDATA
(7)10,Sales,Virginia
(8)20,Accounting,Virginia
(9)30,Consulting,Virginia
(10)40,Finance,Virginia
(1):这会告诉sqlldr要做什么,上面的例子指示要加载数据。
(2):*是指要加载所有的数据(例子1),也可以直接指定数据文件的名字(例子2)。
(3):这会告诉sqlldr要加载到哪个表中。完整语法:[insert | append | replace | truncate] into table dept insert - 默认就是insert,后面的dept表必须的空的;append - 是追加,后面的dept表可以不为空;replace - 是先delete然后在insert;truncate - 是先truncate再insert。
(4):是告诉sqlldr以逗号分隔值。
(5):是告诉sqlldr数据要加载到对应的列中。
(6):是告诉sqlldr要加载的数据开始了。
(7)~(10):是要被加载的具体的数据。
4.常见的一些问题如何加载特殊字符(引号)
- [oracle@linux sqlldr]$ pwd
- /u01/sqlldr
- [oracle@linux sqlldr]$ cat demo3.ctl
- LOAD DATA
- INFILE *
- REPLACE INTO TABLE DEPT
- FIELDS TERMINATED BY ","OPTIONALLY ENCLOSED BY """
- (DEPTNO,DNAME,LOC)
- BEGINDATA
- 10,Sales,"Virginia,USA"
- 20,Accounting,"VS,""USA"""
- 30,Consulting,Virginia
- 40,Finance,Virginia
- [oracle@linux sqlldr]$ sqlldr ing/ing control=demo3.ctl
-
- SQL*Loader: Release 10.2.0.4.0 - Production on 星期二 10月 4 19:36:52 2011
-
- Copyright (c) 1982, 2007, Oracle. All rights reserved.
-
- 达到提交点 - 逻辑记录计数 4
查询结果
- SQL> select * from dept;
-
- DEPTNO DNAME LOC
- ---------- -------------------- --------------------
- 10 Sales Virginia,USA
- 20 Accounting VS,"USA"
- 30 Consulting Virginia
- 40 Finance Virginia
说明:部门10中的Virginia,USA:这是因为数据是"Virginia,USA"。输入数据字段必须包括在括号里才能保留数据中的逗号。VS,"USA":这是因为输入数据是"VS,""USA"""。对于括号引起的字符串,两次“记为一次出现。如何加载固定格式数据
- [oracle@linux sqlldr]$ pwd
- /u01/sqlldr
- [oracle@linux sqlldr]$ cat demo4.ctl
- LOAD DATA
- INFILE *
- INTO TABLE DEPT
- REPLACE
- (DEPTNO POSITION(1:2),
- DNAME POSITION(3:12),
- LOC POSITION(13:20))
- BEGINDATA
- 10Sales Virginia
- 20AccountingVirginia
- 30ConsultingVirginia
- 40Finance Virginia
- [oracle@linux sqlldr]$ sqlldr ing/ing control=demo4.ctl
-
- SQL*Loader: Release 10.2.0.4.0 - Production on 星期二 10月 4 19:45:56 2011
-
- Copyright (c) 1982, 2007, Oracle. All rights reserved.
-
- 达到提交点 - 逻辑记录计数 4
查看
- SQL> select * from dept;
-
- DEPTNO DNAME LOC
- ---------- -------------------- --------------------
- 10 Sales Virginia
- 20 Accounting Virginia
- 30 Consulting Virginia
- 40 Finance Virginia
说明:上面控制文件中的(DEPTNO POSITION(1:2), DNAME POSITION(3:12), LOC POSITION(13:20))还可以改为(DEPTNO POSITION(1:2), DNAME POSITION(*:12), LOC POSITION(*:20))效果是一样的。前者是绝对位置,后者是相对位置。
Oracle在NOARCHIVELOG模式下冷备份还原数据库Oracle外部表相关资讯 Oracle教程
- Oracle中纯数字的varchar2类型和 (07/29/2015 07:20:43)
- Oracle教程:Oracle中查看DBLink密 (07/29/2015 07:16:55)
- [Oracle] SQL*Loader 详细使用教程 (08/11/2013 21:30:36)
| - Oracle教程:Oracle中kill死锁进程 (07/29/2015 07:18:28)
- Oracle教程:ORA-25153 临时表空间 (07/29/2015 07:13:37)
- Oracle教程之管理安全和资源 (04/08/2013 11:39:32)
|
本文评论 查看全部评论 (0)