【SQL*Loader】SQL*Loader实验之(17)--灵活处理数据中存在回车换行符的情况。


【实验内容】
模拟情况:今天模拟一种比较棘手的情况--数据中存在回车换行符("\n")的情况。
这种情况其实解决起来并不麻烦,只需要在控制文件中,将相关列字段指定用标准换行符chr(10)替换掉数据中"\n"字符即可。

※在默认情况下,标准换行符也是SQLLDR识别数据行结束的标志符,因此要将含换行符的数据加载到表中需要用chr(10)来替换一下。

例如:
----------------------------------------
LOAD DATA
INFILE 'dept2_ShiYan17_01.dat'
BADFILE 'dept2_ShiYan17_01.bad'
DISCARDFILE 'dept2_ShiYan17_01.dis'
INTO TABLE dept2
APPEND
FIELDS TERMINATED BY ","
(  DEPTNO,
   DNAME,
   LOC "replace(:LOC, '\\n',chr(10))"  -- :LOC 是用来引用LOC字段的数据,'\\n' 使用了转义符'\',chr(10) 为标准换行符。
   )
----------------------------------------


【实验过程】
//(1)数据加载前的dept2中的数据状况。

-------------------------
SQL> select * from dept2;

未选定行

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

//(2)做成数据文件dept2_ShiYan17_01.dat
----------------------------------------
10,ACCOUNTING,NEW YORK
20,RESEARCH,DALLAS
30,SALES,CHICAGO
40,OPERATIONS,BOSTON\nGOOD
----------------------------------------

//(3)做成sqlloder导入用控制文件dept2_ShiYan17_01.ctl
内容如下:
----------------------------------------
LOAD DATA
INFILE 'dept2_ShiYan17_01.dat'
BADFILE 'dept2_ShiYan17_01.bad'
DISCARDFILE 'dept2_ShiYan17_01.dis'
INTO TABLE dept2
APPEND
FIELDS TERMINATED BY ","
(  DEPTNO,
   DNAME,
   LOC "replace(:LOC, '\\n',chr(10))"  -- :LOC 是用来引用LOC字段的数据,'\\n' 使用了转义符'\',chr(10) 为标准换行符。
   )
----------------------------------------

//(4)启动并执行sqlloader。
sqlldr scott/tiger control="dept2_ShiYan17_01.ctl"  log="dept2_ShiYan17_01.log"

--------------------
D:\Oracle学习\test\sqlloader\实验17>sqlldr scott/tiger control="dept2_ShiYan17_01.ctl"  log="dept2_ShiYan17_01.log"
SQL*Loader: Release 10.2.0.1.0 - Production on 星期六 6月 25 21:45:20 2011
Copyright (c) 1982, 2005, Oracle.  All rights reserved.

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

D:\Oracle学习\test\sqlloader\实验17>

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

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

SQL*Loader: Release 10.2.0.1.0 - Production on 星期六 6月 25 21:45:20 2011

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

控制文件:      dept2_ShiYan17_01.ctl
数据文件:      dept2_ShiYan17_01.dat
  错误文件:    dept2_ShiYan17_01.bad
  废弃文件:    dept2_ShiYan17_01.dis
(可废弃所有记录)

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

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

   列名                        位置      长度  中止 包装数据类型
------------------------------ ---------- ----- ---- ---- ---------------------
DEPTNO                              FIRST     *   ,       CHARACTER           
DNAME                                NEXT     *   ,       CHARACTER           
LOC                                  NEXT     *   ,       CHARACTER           
    列的 SQL 串: "replace(:LOC, '\n',chr(10))"


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


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

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

从 星期六 6月  25 21:45:20 2011 开始运行
在 星期六 6月  25 21:45:20 2011 处运行结束

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

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

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

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON
                          GOOD


已选择4行。

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

 

请使用浏览器的分享功能分享到微信等