所有SQL*Loader实验笔记

实验案例总结(1-7):     SQL*Loader实验笔记【一】

实验案例总结(8-13):   SQL*Loader实验笔记【二】

实验案例总结(14-19): SQL*Loader实验笔记【三】

 

8)加载序列

  • 初始化
CJ@db11g>create table t2 (seqno int,name varchar2(20));
 
Table created.
  • 控制文件
load data
infile *
into table t2
replace
(
seqno RECNUM,
name Position(1:1024)
)
BEGINDATA
chen
jian
wang
  • 验证结果
CJ@db11g>select * from t2;
 
     SEQNO NAME
---------- --------------------
         1 chen
         2 jian
         3 wang
  • 备注
  1. RECNUM关键字指定序列,也可以指定SEQUENCE参数,如:
INTO TABLE dept
(deptno  SEQUENCE(1, 3),
 dname   POSITION(1:14) CHAR)

9)载入有换行符的数据(REPLACE)

  • 初始化
CJ@db11g>desc t;
 Name                                                  Null?    Type
 ----------------------------------------------------- -------- ------------------------------------
 DEPTNO                                                         NUMBER(2)
 DNAME                                                          VARCHAR2(14)
 LOC                                                            VARCHAR2(13)
 LAST_UPTIME                                                    DATE
 ALL_LINE                                                       VARCHAR2(100)
  • 控制文件
LOAD DATA
INFILE *
INTO TABLE t
REPLACE
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
(
DEPTNO,
DNAME "upper(:dname)",
LOC "upper(:loc)",
LAST_UPTIME date 'dd/mm/yyyy',
ALL_LINE "replace(:all_line,'n',chr(10))"
)
BEGINDATA
10,Sales,Virginia,01/04/2001,This is the SalesnOffice in Virginia
20,Accounting,Virginia,13/04/2001,This is the AccountingnOffice in Virginia
30,Consulting,Virginia,14/04/2001,This is the ConsultingnOffice in Virginia
40,Finance,Virginia,14/05/2001,This is the FinancenOffice in Virginia
  • 验证结果
CJ@db11g>select *from t;
 
    DEPTNO DNAME          LOC           LAST_UPTI ALL_LINE
---------- -------------- ------------- --------- ----------------------------------------------------------------------------------------------------
        10 SALES          VIRGINIA      01-APR-01 This is the Sales
                                                  Office i
                                                   Virgi
                                                  ia
 
        20 ACCOUNTING     VIRGINIA      13-APR-01 This is the Accou
                                                  ti
                                                  g
                                                  Office i
                                                   Virgi
                                                  ia
 
    DEPTNO DNAME          LOC           LAST_UPTI ALL_LINE
---------- -------------- ------------- --------- ----------------------------------------------------------------------------------------------------
 
        30 CONSULTING     VIRGINIA      14-APR-01 This is the Co
                                                  sulti
                                                  g
                                                  Office i
                                                   Virgi
                                                  ia
 
        40 FINANCE        VIRGINIA      14-MAY-01 This is the Fi
                                                  a
                                                  ce
 
    DEPTNO DNAME          LOC           LAST_UPTI ALL_LINE
---------- -------------- ------------- --------- ----------------------------------------------------------------------------------------------------
                                                  Office i
                                                   Virgi
                                                  ia
  • 备注
  1. 加载的数据中使用非换行符的其他字符表示换行符(本例中使用了“n”,这里的方法是使用replace函数用一个CHR(10)替换该文本。
  2. chr()函数的作用是将某个ascii码转换为字符,和ascii()函数对应,这里的10转换就是换行符。

10)载入有换行符的数据(FIX)

  • 初始化
CJ@db11g>desc t;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 DEPTNO                                             NUMBER(5)
 DNAME                                              VARCHAR2(14)
 LOC                                                VARCHAR2(50)

数据内容

10,bean1,ora
cle beanbee user 20,bean2,oracle bean
bee user 30,bean3,oracle beanbee us
er 40,beanbee4,o
racle beanbee user
  • 控制文件
LOAD DATA
INFILE 'test.csv' "fix 40"
INTO TABLE t
REPLACE
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
(
DEPTNO,
DNAME,
LOC
)
  • 验证结果
CJ@db11g>select * from t;
 
    DEPTNO DNAME          LOC
---------- -------------- --------------------------------------------------
        10 bean1          ora
                          cle beanbee user
 
        20 bean2          oracle bean
                          bee user
 
        30 bean3          oracle beanbee us
                          er
  • 备注
  1. 使用FIX属性必须指定INFILE选项。
  2. 使用FIX方法,输入数据必须出现在定长记录中,每个记录于输入数据集中所有其他记录的长度都相同,即有相同的字节书,所以这种方式多使用于定长输入文件,可以使用unix下的od工具检验输入数据的合法性,od工具会将文件以八进制(和其他格式)转储到屏幕上,同时可以对输出格式化使其每行显示10个字符,如下:
[oracle@bean ~]$ od -c -w10 -v test.csv
0000000   1   0   ,   b   e   a   n   1   ,   o
0000012   r   a  \n   c   l   e       b   e   a
0000024   n   b   e   e       u   s   e   r   
0000036                                       
0000050   2   0   ,   b   e   a   n   2   ,   o
0000062   r   a   c   l   e       b   e   a   n
0000074  \n   b   e   e       u   s   e   r   
0000106                                       
0000120   3   0   ,   b   e   a   n   3   ,   o
0000132   r   a   c   l   e       b   e   a   n
0000144   b   e   e       u   s  \n   e   r   
0000156                                       
0000170   4   0   ,   b   e   a   n   b   e   e
0000202   4   ,   o  \n   r   a   c   l   e   
0000214   b   e   a   n   b   e   e       u   s
0000226   e   r  \n
0000231

可以注意到上面导入的数据中40的行没有导入成功,这就是输入数据格式不对,可以看到最后一行有一个 \n 结束,这个情况会在导入的时候出现报错:

SQL*Loader-501: Unable to read file (test.csv)

SQL*Loader-566: partial record found at end of datafile

SQL*Loader-2026: the load was aborted because SQL Loader cannot continue.

可以在od的输出看到每行记录之间出现了一个空行,其实这个都是空格,需要注意的是这些空格会在导入后在数据库中保留,如下:

CJ@db11g>select deptno,'"'||loc||'"' loc from t;
 
    DEPTNO LOC
---------- ----------------------------------------------------
        10 "ora
           cle beanbee user           "
 
        20 "oracle bean
           bee user           "
 
        30 "oracle beanbee us
           er           "

后续的数据处理可以使用SQL的TRIM函数截断。

11)载入有换行符的数据(VAR)

  • 初始化
CJ@db11g>desc t
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 DEPTNO                                             NUMBER(5)
 DNAME                                              VARCHAR2(14)
 LOC                                                VARCHAR2(50)

数据内容

04610,Sales,This is the Sales
Office in Virginia
05620,Accounting,This is the Accounting
Office in Virginia
05630,Consulting,This is the Consulting
Office in Virginia
05040,Finance,This is the Finance
Office in Virginia
  • 控制文件
LOAD DATA
INFILE 'test.csv' "var 3"
INTO TABLE t
REPLACE
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
(
DEPTNO,
DNAME,
LOC
)
  • 验证结果
CJ@db11g>select * from t;
 
    DEPTNO DNAME          LOC
---------- -------------- --------------------------------------------------
        10 Sales          This is the Sales
                          Office in Virginia
 
        20 Accounting     This is the Accounting
                          Office in Virginia
 
        30 Consulting     This is the Consulting
                          Office in Virginia
 
        40 Finance        This is the Finance
                          Office in Virginia
  • 备注
  1. 使用VAR属性必须指定INFILE选项。
  2. 通过VAR属性指定每个记录的总字节数,即记录的总长度,这样就可以方便的加载包含换行符的变长记录了。
  3. VAR 3表示在每一行记录的前3个字节指定这一行记录的字节总数,如056表示这一行记录共有56个字节。

12)载入有换行符的数据(STR)

  • 初始化
CJ@db11g>desc t;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 DEPTNO                                             NUMBER(5)
 DNAME                                              VARCHAR2(14)
 LOC                                                VARCHAR2(50)

数据内容

10,bean1,ora
cle beanbee user|
20,bean2,oracle bean
bee user1|
30,bean3,oracle beanbee us
er12|
40,beanbee4,o
racle be
anbee us
er123|
  • 控制文件
LOAD DATA
INFILE 'test.csv' "str x'7C0A'"
INTO TABLE t
REPLACE
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
(
DEPTNO,
DNAME,
LOC
)
  • 验证结果
CJ@db11g>select * from t;
 
        10 bean1          ora
                          cle beanbee user
 
        20 bean2          oracle bean
                          bee user1
 
        30 bean3          oracle beanbee us
                          er12
 
        40 beanbee4       o
                          racle be
                          anbee us
                          er123
  • 备注
  1. 使用STR属性必须指定INFILE选项。
  2. 使用STR属性可以指定某个字符序列为一个新的行结束符,这样SQL*Loader就不会以新的行结束符来标识一行的末尾,对于加载含有换行的数据,这种方式有着较上面三种方式更大的便利。
  3. 用来指定为新的换行符的字符序列通常会使用某个特殊标记,然后加上一个换行符(在一个文本编辑器中查看输入数据时,就能很容易的看到行结束符)
  4. STR属性以十六进制指定,要得到所需的具体的十六进制串,可以使用SQL中的utl_raw.cast_to_raw方法,之后再将得到的数值添加到控制文件中。获取如下:
CJ@db11g>select utl_raw.cast_to_raw('|'||chr(10)) from dual;

UTL_RAW.CAST_TO_RAW('|'||CHR(10))
--------------------------------------------------------------------------------
7C0A

13)使用nullif子句

  • 初始化
CJ@db11g>create table t3 (x varchar2(10),y varchar2(10));
 
Table created.
  • 控制文件
LOAD DATA
INFILE *
INTO TABLE t3
REPLACE
(
x position(1:2) integer external nullif x='1',
y position(3:8)
)
BEGINDATA
1 10
20lg
  • 验证结果
CJ@db11g>select *from t3;
 
X          Y
---------- ----------
           10
20         lg
  • 备注
  1. integer external nullif x='1'      判断x字段,如果x的值为1,就将其置为空
  2. 与其相同的用法有defaultif,如指定col2 POSITION (6:8) INTEGER EXTERNAL DEFAULTIF col1 = 'aname',那么就是当字段为aname时将其置为空

SQL*Loader实验笔记【二】的更多相关文章

  1. 深度学习入门教程UFLDL学习实验笔记二:使用向量化对MNIST数据集做稀疏自编码

    今天来做UFLDL的第二个实验,向量化.我们都知道,在matlab里面基本上如果使用for循环,程序是会慢的一逼的(可以说基本就运行不下去)所以在这呢,我们需要对程序进行向量化的处理,所谓向量化就是将 ...

  2. 《SQL必知必会》学习笔记二)

    <SQL必知必会>学习笔记(二) 咱们接着上一篇的内容继续.这一篇主要回顾子查询,联合查询,复制表这三类内容. 上一部分基本上都是简单的Select查询,即从单个数据库表中检索数据的单条语 ...

  3. oracle数据处理之sql*loader(二)

    目录 SQL*Loader对不同文件及格式的处理方法 2.1 Excel文件 一般的Excel文件最大行数不超过65536行,说明数据处理量并不大,处理Excel的方式是将其另存为CSV格式文件,然后 ...

  4. Oracle【IT实验室】数据库备份与恢复之二:SQL*Loader

    2.1 基本知识 Oracle 的  SQL* LOADER  可以将外部格式化的文本数据加载到数据库表中.通常 与 SPOOL导出文本数据方法配合使用.     1.命令格式 SQLLDR keyw ...

  5. 【Oracle】数据迁移工具(1):SQL Loader

    SQL Loader是一种数据加载工具,可以把外部数据加载到Oracle数据库中.SQL Loader中的参数有很多,本文只在第一部分中列出常用参数.要想运用SQL Loader工具 ,需要我们编辑一 ...

  6. oracle数据处理之sql*loader(一)

    SQL*Loader是oracle提供的可以从多种平面文件中向数据库中加载数据的工具,它比较适合业务分析类型数据库(数据仓库);使用sqlldr工具可以在很短的时间内向数据库中加载大量的数据,像把制作 ...

  7. SQL基础语法笔记教程整理

    PS:本文适用SQL Server2008语法. 一.关系型数据库和SQL 实际上准确的讲,SQL是一门语言,而不是一个数据库. 什么是SQL呢?简而言之,SQL就是维护和使用关系型数据库中的的数据的 ...

  8. SQL LOADER 的用法 TXT文件导入非常之快

    前提,需要本地安装ORACLE 客户端 控制文件 cms.ctl load dataCHARACTERSET UTF8infile 'oracle.txt'APPEND INTO TABLE JR f ...

  9. 20145221 《Java程序设计》实验报告二:Java面向对象程序设计

    20145221 <Java程序设计>实验报告二:Java面向对象程序设计 实验要求 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...

随机推荐

  1. Unity Svn(转)

    先吐个槽.关于这个国内各种简单到家的文章让人搞不懂,而且场景合并,prefab合并等关键问题都说没法解决,其实本质就是因为它们都是二进制文件,所以SVN没法对其合并,但事实上Unity是支持把这些文件 ...

  2. Linq 动态查询排序

    Linq的排序一般是这样写的: query.OrderBy(x => x.Tel).Skip().Take(); 实际使用中排序字段可能是通过字符类型的参数来设置的,于是想这样实现: query ...

  3. butterknife异常提示:attribute value must be constant

    就是因为你的android工程是lib类型的 如: apply plugin: 'com.android.library' android { compileSdkVersion 23 buildTo ...

  4. memcache的windows下的安装和简单使用

    原文:memcache的windows下的安装和简单使用 memcache是为了解决网站访问量大,数据库压力倍增的解决方案之一,由于其简单实用,很多站点现在都在使用memcache,但是memcach ...

  5. LeetCode Burst Balloons

    原题链接在这里:https://leetcode.com/problems/burst-balloons/ 题目: Given n balloons, indexed from 0 to n-1. E ...

  6. RDIFramework.NET V2.9版本多语言的实现

    RDIFramework.NET V2.9版本多语言的实现 现在是国际化时代,软件也不能落后.一个公司里很可能会有老外,也可能有台湾的朋友,他们用软件的习惯都不一样,若同样一个软件同时能适应多种语言文 ...

  7. MVC4中重复使用JQuery Mobile Dialog的做法实践.

    第一步:建立mobile项目类型 第二步:添加针对对话框的的DialogController.cs: 建立这个Controller的目的是此Dlg可以反复使用,把它做成一个固定界面,其他的Contro ...

  8. Linux的硬链接为何不能链接目录

    Linux中的目录文件是特殊的文件,其中的数据是一个关联列表的,像c++中的map,或者Python中的dict,保存每个文件名(包括子目录,Linux中一切皆文件!)到iNode的映射.iNode本 ...

  9. 向ES6看齐,用更好的JavaScript(三)

    本文是ES6系列的第三篇,主要介绍ES6新增的数据类型.数据结构,先上传送门: 1 变量部分 2 现有对象拓展 3 新增数据类型/数据结构 4 新的异步编程模式 5 类和模块 1 第七种数据类型Sym ...

  10. final关键字用法总结

    在java中,可能使用到final关键字修饰的有数据.方法和类. 一.final 修饰数据 有final修饰的数据是用来告诉编译器一块数据是恒定不变的,有时数据恒定不变是很有用的,比如: 1.一个永不 ...