ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 【SQL*Loader】SQL*Loader实验之(7)--数据文件中字段个数少于表中列字段个数

【SQL*Loader】SQL*Loader实验之(7)--数据文件中字段个数少于表中列字段个数

原创 Linux操作系统 作者:chicheng_cn421 时间:2011-06-19 13:55:31 0 删除 编辑


【实验内容】
在这个实验中,我将模拟另一种要加载的数据文件与表中字段定义不完全匹配的情况--数据文件中的列数据的个数 比 表中字段的个数 少。

这里分两种情况来说明:
(1)数据文件中字段个数少于表中列字段个数,但数据文件中缺少的列,在表定义中可以为空。
     ----- 这种情况是比较简单的,只需要将数据文件中数据对应的列的名字写到控制文件中即可。
           因为SQL*Loader是根据控制文件中给出的字段名字 和 数据文件中的字段的位置建立绑定并完成数据导入的。
(2)数据文件中字段个数少于表中列字段个数,但数据文件中缺少的列,在表定义中不可以为空,必须赋值。
     ----- 这种情况相对来说稍稍麻烦,不能通过简单的位置绑定来完成映射和数据导入。
           常见的几种情况有“赋与固定值”、“调用序列赋值”“调用系统或自定义函数赋值”等等。
           这几种情况在接下来的几个实验中会陆续去实验。

           本实验只去讨论一下“赋予固定值”的情况。


【实验过程】

//(1)先追加一个非空的列。

  --因为要追加非空字段,所以表中数据需要全部清除,否则无法追加非空字段。
truncate table dept2 ;
  --追加非空字段
alter table DEPT2 add Add_COL_CANNOT_NULL varchar2(10) not null;


//(2)看一下数据导入前dept2中表的数据状况
       ^^当然了刚刚truncate过了,表是空空的啦~~

-------------------------
SQL> desc dept2;

 名称是否为空?         类型
 -----------------------------------
 DEPTNO                NUMBER(2)
 DNAME                 VARCHAR2(14)
 LOC                   VARCHAR2(13)
 ADD_COL_CANNOT_NULL   NOT NULL VARCHAR2(10)

SQL> select * from dept2;

未选定行

SQL>
-------------------------

//(3)做成dept2_ShiYan07_01.dat数据文件。
内容如下:※这里面没有最后新追加的非空字段ADD_COL_CANNOT_NULL的数据。
----------------------------------------
12,ACCOUNTING,NEW YORK
22,RESEARCH,DALLAS
32,SALES,CHICAGO
42,OPERATIONS,BOSTON
----------------------------------------

//(4)做成sqlloder导入用控制文件dept2_ShiYan07_01.ctl
内容如下:
----------------------------------------
LOAD DATA
INFILE 'dept2_ShiYan07_01.dat'
BADFILE 'dept2_ShiYan07_01.bad'
INTO TABLE dept2
APPEND
FIELDS TERMINATED BY ","
TRAILING NULLCOLS  -- 表的字段没有对应的值时允许为空
( DEPTNO,
  DNAME,
  LOC,
  ADD_COL_CANNOT_NULL "0"
)
----------------------------------------

//(5)启动并执行sqlloader。

sqlldr scott/tiger control="dept2_ShiYan07_01.ctl"  log="dept2_ShiYan07_01.log"

--------------------

D:\Oracle学习\test\sqlloader\实验7>sqlldr scott/tiger control="dept2_ShiYan07_01.ctl"  log="dept2_ShiYan07_01.log"

SQL*Loader: Release 10.2.0.1.0 - Production on 星期日 6月 19 13:52:34 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

达到提交点 - 逻辑记录计数 3
达到提交点 - 逻辑记录计数 4

D:\Oracle学习\test\sqlloader\实验7>
--------------------

产生的Log文件
--------------------

SQL*Loader: Release 10.2.0.1.0 - Production on 星期日 6月 19 13:52:34 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

控制文件:      dept2_ShiYan07_01.ctl
数据文件:      dept2_ShiYan07_01.dat
  错误文件:    dept2_ShiYan07_01.bad
  废弃文件:    未作指定
 
(可废弃所有记录)

要加载的数: ALL
要跳过的数: 0
允许的错误: 50
绑定数组: 64 行, 最大 256000 字节
继续:    未作指定
所用路径:       常规

表 DEPT2,已加载从每个逻辑记录
插入选项对此表 APPEND 生效
TRAILING NULLCOLS 选项生效

   列名                        位置      长度  中止 包装数据类型
------------------------------ ---------- ----- ---- ---- ---------------------
DEPTNO                              FIRST     *   ,       CHARACTER           
DNAME                                NEXT     *   ,       CHARACTER           
LOC                                  NEXT     *   ,       CHARACTER           
ADD_COL_CANNOT_NULL                  NEXT     *   ,       CHARACTER           
    列的 SQL 串: "0"


表 DEPT2:
  4 行 加载成功。
  由于数据错误, 0 行 没有加载。
  由于所有 WHEN 子句失败, 0 行 没有加载。
  由于所有字段都为空的, 0 行 没有加载。


为绑定数组分配的空间:                 66048 字节 (64 行)
读取   缓冲区字节数: 1048576

跳过的逻辑记录总数:          0
读取的逻辑记录总数:             4
拒绝的逻辑记录总数:          0
废弃的逻辑记录总数:        0

从 星期日 6月  19 13:52:34 2011 开始运行
在 星期日 6月  19 13:52:34 2011 处运行结束

经过时间为: 00: 00: 00.37
CPU 时间为: 00: 00: 00.19

--------------------

执行后 dept2中的数据状况。
--------------------
SQL> select * from dept2;

    DEPTNO DNAME          LOC           ADD_COL_CA
---------- -------------- ------------- ----------
        12 ACCOUNTING     NEW YORK      0
        22 RESEARCH       DALLAS        0
        32 SALES          CHICAGO       0
        42 OPERATIONS     BOSTON        0

已选择4行。

SQL>
--------------------
以上。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/20335819/viewspace-700199/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-03-05

  • 博文量
    261
  • 访问量
    369176