【实验内容】
模拟情况:同一数据文件,根据一定规则同时导入多张表。
※实际上这个是SQL*Loader控制文件中WHEN关键字的使用。
【实验过程】
//(1)整理环境
drop table dept2 purge;
drop table dept3 purge;
create table DEPT2
(
DEPTNO NUMBER(2),
DNAME VARCHAR2(14),
LOC VARCHAR2(13)
);
create table DEPT3
(
DEPTNO NUMBER(2),
DNAME VARCHAR2(14),
LOC VARCHAR2(13)
);
-------------------------
SQL> drop table dept2 purge;
表已删除。
SQL> drop table dept3 purge;
表已删除。
SQL> create table DEPT2
2 (
3 DEPTNO NUMBER(2),
4 DNAME VARCHAR2(14),
5 LOC VARCHAR2(13)
6 );
表已创建。
SQL> create table DEPT3
2 (
3 DEPTNO NUMBER(2),
4 DNAME VARCHAR2(14),
5 LOC VARCHAR2(13)
6 );
表已创建。
SQL> desc dept3;
名称 是否为空? 类型
---------------------------------------
DEPTNO NUMBER(2)
DNAME VARCHAR2(14)
LOC VARCHAR2(13)
SQL> desc dept2;
名称 是否为空? 类型
---------------------------------------
DEPTNO NUMBER(2)
DNAME VARCHAR2(14)
LOC VARCHAR2(13)
SQL> select * from dept2;
未选定行
SQL> select * from dept3;
未选定行
SQL>
-------------------------
//(2)做成数据文件dept2_ShiYan13_01.dat。
----------------------------------------
dept2,10,ACCOUNTING,NEW YORK
dept2,20,RESEARCH,DALLAS
dept2,30,SALES,CHICAGO
dept2,40,OPERATIONS,BOSTON
dept3,11,ACCOUNTING,NEW YORK
dept3,21,RESEARCH,DALLAS
dept3,31,SALES,CHICAGO
dept3,41,OPERATIONS,BOSTON
----------------------------------------
//(3)做成sqlloder导入用控制文件dept2_ShiYan13_01.ctl
内容如下:
----------------------------------------
LOAD DATA
INFILE 'dept2_ShiYan13_01.dat'
BADFILE 'dept2_ShiYan13_01.bad'
DISCARDFILE 'dept2_ShiYan13_01.dis'
TRUNCATE
INTO TABLE dept2
WHEN flg='dept2'
FIELDS TERMINATED BY ","
( flg FILLER POSITION(1) , --注意:一定要指定POSITION(1)不能省略,只有指定POSITION(1)才能决定数据从第一列开始读取,否则会出现空值或数据列错位。
DEPTNO,
DNAME,
LOC
)
INTO TABLE dept3
WHEN flg='dept3'
FIELDS TERMINATED BY ","
( flg FILLER POSITION(1) , --注意:一定要指定POSITION(1)不能省略,只有指定POSITION(1)才能决定数据从第一列开始读取,否则会出现空值或数据列错位。
DEPTNO,
DNAME,
LOC
)
----------------------------------------
//(4)启动并执行sqlloader。
sqlldr scott/tiger control="dept2_ShiYan13_01.ctl" log="dept2_ShiYan13_01.log"
--------------------
D:\Oracle学习\test\sqlloader\实验13>sqlldr scott/tiger control="dept2_ShiYan13_01.ctl" log="dept2_ShiYan13_01.log"
SQL*Loader: Release 10.2.0.1.0 - Production on 星期日 6月 19 23:08:14 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
达到提交点 - 逻辑记录计数 7
达到提交点 - 逻辑记录计数 8
D:\Oracle学习\test\sqlloader\实验13>
--------------------
产生的Log文件
--------------------
SQL*Loader: Release 10.2.0.1.0 - Production on 星期日 6月 19 23:08:14 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
控制文件: dept2_ShiYan13_01.ctl
数据文件: dept2_ShiYan13_01.dat
错误文件: dept2_ShiYan13_01.bad
废弃文件: dept2_ShiYan13_01.dis
(可废弃所有记录)
要加载的数: ALL
要跳过的数: 0
允许的错误: 50
绑定数组: 64 行, 最大 256000 字节
继续: 未作指定
所用路径: 常规
表 DEPT2,已加载在FLG = 0X6465707432(字符 'dept2')
插入选项对此表 TRUNCATE 生效
列名 位置 长度 中止 包装数据类型
------------------------------ ---------- ----- ---- ---- ---------------------
FLG 1 * , CHARACTER
(FILLER FIELD)
DEPTNO NEXT * , CHARACTER
DNAME NEXT * , CHARACTER
LOC NEXT * , CHARACTER
表 DEPT3,已加载在FLG = 0X6465707433(字符 'dept3')
插入选项对此表 TRUNCATE 生效
列名 位置 长度 中止 包装数据类型
------------------------------ ---------- ----- ---- ---- ---------------------
FLG 1 * , CHARACTER
(FILLER FIELD)
DEPTNO NEXT * , CHARACTER
DNAME NEXT * , CHARACTER
LOC NEXT * , CHARACTER
表 DEPT2:
4 行 加载成功。
由于数据错误, 0 行 没有加载。
由于所有 WHEN 子句失败, 4 行 没有加载。
由于所有字段都为空的, 0 行 没有加载。
表 DEPT3:
4 行 加载成功。
由于数据错误, 0 行 没有加载。
由于所有 WHEN 子句失败, 4 行 没有加载。
由于所有字段都为空的, 0 行 没有加载。
为绑定数组分配的空间: 132096 字节 (64 行)
读取 缓冲区字节数: 1048576
跳过的逻辑记录总数: 0
读取的逻辑记录总数: 8
拒绝的逻辑记录总数: 0
废弃的逻辑记录总数: 0
从 星期日 6月 19 23:08:14 2011 开始运行
在 星期日 6月 19 23:08:15 2011 处运行结束
经过时间为: 00: 00: 00.68
CPU 时间为: 00: 00: 00.21
--------------------
执行后 dept2、dept3中的数据状况。
--------------------
SQL> select * from dept2;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
已选择4行。
SQL> select * from dept3;
DEPTNO DNAME LOC
---------- -------------- -------------
11 ACCOUNTING NEW YORK
21 RESEARCH DALLAS
31 SALES CHICAGO
41 OPERATIONS BOSTON
已选择4行。
SQL>
--------------------
以上。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/20335819/viewspace-700220/ ,如需转载,请注明出处,否则将追究法律责任。