zoukankan      html  css  js  c++  java
  • SQL*Loader之CASE1

    最近项目涉及到将文本文件中的数据导入到Oracle数据库中,故研究了下SQL*Loader,官档提供的资料不是很丰富,很多案例中出现的语句在官档中找不到出处。但它提供的案例本身却彰显出了SQL*Loader功能的强大。鉴于Oracle 11g的软件本身没有携带这些案例,需要专门到官方网站下载Oracle Database 11g Release 2 Examples,甚是麻烦。在此,将这些案例分享,也方便以后研究、借鉴。

    因官方文档还没有研究完,手里还有本《Oracle SQL*Loader: The Definitive Guide》。故案例先行,理论在后。

    这11个案例下载地址:http://pan.baidu.com/s/1o6Hl57G

    一共有11个案例,案例基本上包括三部分,控制文件、SQL脚本、数据文件。有的没有数据文件,直接在控制文件中提供。

    CASE1

    1. SQL脚本

    [oracle@node3 ulcase]$ cat ulcase1.sql

    set termout offdrop table emp;
    drop table dept;
    
    create table emp
           (empno number(4) not null,
            ename char(10),
            job char(9),
            mgr number(4),
            hiredate date,
            sal number(7,2),
            comm number(7,2),
            deptno number(2));
    
    create table dept
           (deptno number(2),
            dname char(14) ,
            loc char(13) ) ;
    
    exit

    2. 控制文件

    [oracle@node3 ulcase]$ cat ulcase1.ctl

    -- NAME
    -- ulcase1.ctl - SQL*Loader Case Study 1: Loading Variable-Length Data
    --
    -- DESCRIPTION
    -- This case study demonstrates the following:
    --
    -- A simple control file identifying one table and three columns
    -- to be loaded.
    --
    -- Including data to be loaded from the control file itself, so
    -- there is no separate datafile.
    --
    -- Loading data in stream format, with both types of delimited
    -- fields: terminated and enclosed.--
    -- NOTES ABOUT THIS CONTROL FILE
    -- The LOAD DATA statement is required at the beginning of the
    -- control file.
    --
    -- INFILE * specifies that the data is found in the control file
    -- and not in an external file.
    --
    -- The INTO TABLE statement is required to identify the table to
    -- be loaded (dept) into. By default, SQL*Loader requires the
    -- table to be empty before it inserts any records.
    --
    -- FIELDS TERMINATED BY specifies that the data is terminated by
    -- commas, but may also be enclosed by quotation marks. Datatypes
    -- for all fields default to CHAR.
    --
    -- The names of columns to load are enclosed in parentheses.
    -- If no datatype or length is specified and the field is delimited
    -- with ENCLOSED BY or with TERMINATED BY, then the default
    -- datatype is CHAR and the default length is 255. If ENCLOSED BY
    -- or TERMINATED BY is not specified, then the default type is CHAR
    -- and the default length is 1.
    --
    --  BEGINDATA specifies the beginning of the data.
    --
    LOAD DATA
    INFILE *
    INTO TABLE DEPT
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
    (DEPTNO, DNAME, LOC)
    BEGINDATA
    12,RESEARCH,"SARATOGA"
    10,"ACCOUNTING",CLEVELAND
    11,"ART",SALEM
    13,FINANCE,"BOSTON"
    21,"SALES",PHILA.
    22,"SALES",ROCHESTER
    42,"INT'L","SAN FRAN"                                                           

    执行后结果:

    [oracle@node3 ulcase]$ sqlplus scott/tiger @ulcase1.sql

    [oracle@node3 ulcase]$ sqlldr userid=scott/tiger control=ulcase1.ctl

    SQL> select * from dept;
    
        DEPTNO DNAME          LOC
    ---------- -------------- -------------
        12     RESEARCH      SARATOGA
        10     ACCOUNTING    CLEVELAND
        11     ART           SALEM
        13     FINANCE       BOSTON
        21     SALES         PHILA.
        22     SALES         ROCHESTER
        42     INT'L         SAN FRAN
    
    7 rows selected.

    总结:在本例中,

           1> INFILE *表示需要导入的数据在该控制文件中,而不在外部文件中。

           2> INTO TABLE语句指定数据导入到哪个表中。

           3> 值域首先被逗号截断,有的值被双括号括起来了。

           4> 对应的列括在括号中,如果没有指定数据类型和长度,在有ENCLOSED BY or TERMINATED BY的情况下,数据文件中对应的数据默认的是CHAR类型,字符长度255.在没有ENCLOSED BY or TERMINATED BY的情况下,默认的也是CHAR类型,但字符长度是1.

           5> BEGINDATA表示控制文件中控制信息的结束,数据的开始。

    
    
  • 相关阅读:
    该伙伴事务管理器已经禁止了它对远程/网络事务的支持。"。
    sqlserver 2005 分布式架构 对等事务复制 .
    兼容级别
    Delphi中的INI文件编程
    金正昆谈礼仪之西餐礼仪zt
    WOW UI定制基本资料初学者指南 被一个疯狂迷恋魔兽的兄弟逼死了,不得以,沦落的作些小脚本,失败呀
    相爱与相知
    情欲信,而词欲巧
    周日去看F1:)
    当程序用ado的jet4.0方式连接的时候,对于设有access数据库密码的mdb的访问居然报错“无法启动应用程序,工作组信息文件丢失,或是已被其他用户已独占方式打开”,而用odbc方式不报错,小阴沟里翻船,郁闷中然后查文档解决之
  • 原文地址:https://www.cnblogs.com/ivictor/p/3980742.html
Copyright © 2011-2022 走看看