SQL*Loader之CASE5

CASE5

1. SQL脚本

[[email protected] ulcase]$ cat ulcase5.sql

set termout off

rem host write sys$output "Building case 5 demonstration tables.  Please wait"

drop table emp;

drop table proj;

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 unique index empix on emp(empno);

create table proj
        (empno number,
         projno number);

exit                        

2. 控制文件

[[email protected] ulcase]$ cat ulcase5.ctl

-- Copyright (c) 1991, 2004 Oracle.  All rights reserved.
-- NAME
-- ulcase5.ctl - SQL*Loader Case Study 5: Loading Data Into Multiple Tables
-- DESCRIPTION
-- This case study demonstrates the following:
-- Loading multiple tables.
--
-- Using SQL*Loader to break down repeating groups in a flat file
-- and to load the data into normalized tables. In this way, one
-- file record may generate multiple database rows.
--
-- Deriving multiple logical records from each physical record.
--
-- Using a WHEN clause.
--
-- Loading the same field (empno) into multiple tables.
--
-- TO RUN THIS CASE STUDY:
-- 1. Before executing this control file, log in to SQL*Plus as
--    scott/tiger. Enter @ulcase5 to execute the SQL script for
--    this case study. This prepares and populates tables and
--    then returns you to the system prompt.
--
-- 2. At the system prompt, invoke the case study as follows:
-- sqlldr USERID=scott/tiger CONTROL=ulcase5.ctl LOG=ulcase5.log
--
-- NOTES ABOUT THIS CONTROL FILE
-- REPLACE specifies that if there is data in the tables to be
-- loaded (emp and proj), SQL*loader should delete the data before
-- loading new rows.
--
-- Multiple INTO TABLE clauses load two tables, emp and proj.
-- The same set of records is processed three times, using different
-- combinations of columns each time to load table proj.
--
-- WHEN loads only rows with nonblank project numbers. When projno
-- is defined as columns 25...27, rows are inserted into proj only
-- if there is a value in those columns.
--
-- When projno is defined as columns 29...31, rows are inserted
-- into proj only if there is a value in those columns.
--
-- When projno is defined as columns 33...35, rows are inserted
-- into proj only if there is a value in those columns.
--
LOAD DATA
INFILE ‘ulcase5.dat‘
BADFILE ‘ulcase5.bad‘
DISCARDFILE ‘ulcase5.dsc‘
REPLACE

INTO TABLE EMP
  (EMPNO    POSITION(1:4)   INTEGER EXTERNAL,
   ENAME    POSITION(6:15)  CHAR,
   DEPTNO   POSITION(17:18) CHAR,
   MGR      POSITION(20:23) INTEGER EXTERNAL)

INTO TABLE PROJ
-- PROJ has two columns, both not null: EMPNO and PROJNO
WHEN PROJNO != ‘   ‘
  (EMPNO    POSITION(1:4)   INTEGER EXTERNAL,
   PROJNO   POSITION(25:27) INTEGER EXTERNAL)   -- 1st proj

INTO TABLE PROJ
WHEN PROJNO != ‘   ‘
  (EMPNO    POSITION(1:4)   INTEGER EXTERNAL,
   PROJNO   POSITION(29:31) INTEGER EXTERNAL)   -- 2nd proj

INTO TABLE PROJ
WHEN PROJNO != ‘   ‘
  (EMPNO    POSITION(1:4)   INTEGER EXTERNAL,
   PROJNO   POSITION(33:35) INTEGER EXTERNAL)   -- 3rd proj
                                                        

3. 数据文件

[[email protected] ulcase]$ cat ulcase5.dat

1234 BAKER      10 9999 101 102 103
1234 JOKER      10 9999 777 888 999
2664 YOUNG      20 2893 425 abc 102
5321 OTOOLE     10 9999 321  55  40
2134 FARMER     20 4555 236 456
2414 LITTLE     20 5634 236 456  40
6542 LEE        10 4532 102 321  14
2849 EDDS       xx 4555     294  40
4532 PERKINS    10 9999  40
1244 HUNT       11 3452 665 133 456
 123 DOOLITTLE  12 9940         132
1453 MACDONALD  25 5532     200

执行后结果:

[[email protected] ulcase]$ sqlplus scott/tiger @ulcase5.sql

[[email protected] ulcase]$ sqlldr userid=scott/tiger control=ulcase5.ctl

SQL> select * from emp;

EMPNO ENAME     JOB         MGR HIREDATE      SAL  COMM DEPTNO
----- ---------- --------- ----- --------- ------- ----- ------
 1234 BAKER                 9999                         10
 5321 OTOOLE                9999                         10
 2134 FARMER                4555                         20
 2414 LITTLE                5634                         20
 6542 LEE                   4532                         10
 4532 PERKINS               9999                         10
 1244 HUNT                  3452                         11
  123 DOOLITTLE             9940                         12
 1453 MACDONALD             5532                         25

9 rows selected.

SQL> select * from proj order by 1;

EMPNO PROJNO
----- ------
  123     132
 1234     101
 1234     103
 1234     102
 1244     456
 1244     133
 1244     665
 1453     200
 2134     236
 2134     456
 2414     456

EMPNO PROJNO
----- ------
 2414     236
 2414      40
 4532      40
 5321      55
 5321      40
 5321     321
 6542     102
 6542      14
 6542     321

20 rows selected.

查看一下日志文件:

[[email protected] ulcase]$ cat ulcase5.log

SQL*Loader: Release 11.2.0.1.0 - Production on Fri Sep 19 00:20:39 2014

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Control File:   ulcase5.ctl
Data File:      ulcase5.dat
  Bad File:     ulcase5.bad
  Discard File: ulcase5.dsc
 (Allow all discards)

Number to load: ALL
Number to skip: 0
Errors allowed: 50
Bind array:     64 rows, maximum of 256000 bytes
Continuation:    none specified
Path used:      Conventional

Table EMP, loaded from every logical record.
Insert option in effect for this table: REPLACE

   Column Name                  Position   Len  Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
EMPNO                                 1:4     4           CHARACTER
ENAME                                6:15    10           CHARACTER
DEPTNO                              17:18     2           CHARACTER
MGR                                 20:23     4           CHARACTER            

Table PROJ, loaded when PROJNO != 0X202020(character ‘   ‘)
Insert option in effect for this table: REPLACE

   Column Name                  Position   Len  Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
EMPNO                                 1:4     4           CHARACTER
PROJNO                              25:27     3           CHARACTER            

Table PROJ, loaded when PROJNO != 0X202020(character ‘   ‘)
Insert option in effect for this table: REPLACE

   Column Name                  Position   Len  Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
EMPNO                                 1:4     4           CHARACTER
PROJNO                              29:31     3           CHARACTER            

Table PROJ, loaded when PROJNO != 0X202020(character ‘   ‘)
Insert option in effect for this table: REPLACE

   Column Name                  Position   Len  Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
EMPNO                                 1:4     4           CHARACTER
PROJNO                              33:35     3           CHARACTER            

Record 2: Rejected - Error on table EMP.
ORA-00001: unique constraint (SCOTT.EMPIX) violated

Record 8: Rejected - Error on table EMP, column DEPTNO.
ORA-01722: invalid number

Record 3: Rejected - Error on table PROJ, column PROJNO.
ORA-01722: invalid number

Table EMP:
  9 Rows successfully loaded.
  3 Rows not loaded due to data errors.
  0 Rows not loaded because all WHEN clauses were failed.
  0 Rows not loaded because all fields were null.

Table PROJ:
  7 Rows successfully loaded.
  2 Rows not loaded due to data errors.
  3 Rows not loaded because all WHEN clauses were failed.
  0 Rows not loaded because all fields were null.

Table PROJ:
  7 Rows successfully loaded.
  3 Rows not loaded due to data errors.
  2 Rows not loaded because all WHEN clauses were failed.
  0 Rows not loaded because all fields were null.

Table PROJ:
  6 Rows successfully loaded.
  3 Rows not loaded due to data errors.
  3 Rows not loaded because all WHEN clauses were failed.
  0 Rows not loaded because all fields were null.

Space allocated for bind array:                   4096 bytes(64 rows)
Read   buffer bytes: 1048576

Total logical records skipped:          0
Total logical records read:            12
Total logical records rejected:         3
Total logical records discarded:        0

Run began on Fri Sep 19 00:20:39 2014
Run ended on Fri Sep 19 00:20:40 2014

Elapsed time was:     00:00:01.30
CPU time was:         00:00:00.70

查看一下bad file:

[[email protected] ulcase]$ cat ulcase5.bad

1234 JOKER      10 9999 777 888 999
2849 EDDS       xx 4555     294  40
2664 YOUNG      20 2893 425 abc 102
时间: 2024-08-10 09:59:48

SQL*Loader之CASE5的相关文章

SQL*loader实验

SQL*Loader 用法: sqlldr keyword=value [,keyword=value,... ] SQL*Loader通过控制文件实现对记录的处理,例子命令行下sqlldr scott/tiger control=case.ctl(并非数据库sql>下) case.ctl内容如下: load data infile *  ##使用*表示加载的数据在控制文件中,如果是独立文件要使用'绝对路径名' into table bonus  ##指定要将数据加载到哪个表中,该表必须已经存在

SQL*Loader FAQ

SQL*Loader FAQ: Contents [hide] 1 What is SQL*Loader and what is it used for? 2 How does one use the SQL*Loader utility? 3 How does one load MS-Excel data into Oracle? 4 Is there a SQL*Unloader to download data to a flat file? 5 Can one load variable

Oracle中的sql loader

oracle 的sql loader用来将操作系统上的数据文件中的内容加载到oracle数据库中. 要使用sql loader,需要先创建一个控制文件,里面告诉sql loader在启动了sql loader之后的加载数据的策略. 新建一个studentdataload.ctl文件,写入   load data      infile 'studentdata.txt'      into table studentinfo      fields terminated by '|'      

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

前提,需要本地安装ORACLE 客户端 控制文件 cms.ctl load dataCHARACTERSET UTF8infile 'oracle.txt'APPEND INTO TABLE JR fields terminated by '|'(BUKRS,LONNO,WAERS,BLDAT,BUDAT,SHKZG,DLCOD,HKONT,FPGRP,FPNAM,LONPR,WRBTR,ECNMA,DLNAM,EVTCD,SEVTC,SEVTD,CITYC,CITY,LONTP,PAYER,R

Oracle Sql Loader的学习使用

最近由于遇到oracle控制文件的使用,虽然不是很复杂,但是从来没有用过,专门花点时间看看.点击 这里 查看详细 1,概述: Sql Loader: 一个批量工具,将文件数据导入到数据库.可以导入一个表或者多个表,甚至可以在导入时修改数据. 2,使用 a,你电脑需要装Oracle,不然你是找不到Sqlldr 这个命令的. 在控制输入台输入 sqlldr: 会列出相关的参数介绍. > sqlldr . . . Usage: SQLLDR keyword=value [,keyword=value,

SQL*Loader数据装载工具入门_超越OCP精通Oracle视频课程培训24

oracle视频教程目标     Oracle视频教程,风哥本套oracle教程培训学习Oracle SQL*Loader概念及用法及SQL*Loader两个案例,同时课件带有近20个案例用于大家自行练习.适用人群IT相关从业人员.Oracle数据库技术人员.想加工资的.想升职的都可以. 视频在线学习地址:http://edu.51cto.com/course/course_id-6987.html Oracle视频教程简介本课程介绍:Oracle视频教程,风哥本套oracle教程培训学习Ora

[Oracle] SQL*Loader 详细使用教程(2)- 命令行参数

sqlldr工具 SQL*Loader的客户端工具是sqlldr,在操作系统的命令行下输入sqlldr,后面不接任何参数,将显示帮助信息如下所示(所有命令行参数的简单描述及其默认值),所以你并不需要对下面的参数死记硬背,当你忘记它们时,可以通过这个方式快速查询. [plain] view plain copy print? Valid Keywords: userid -- ORACLE username/password control -- control file name log -- 

[Oracle] SQL*Loader 详细使用教程(4)- 字段列表

在上一篇中我们介绍了SQL*Loader中最重要的文件——控制文件,而本篇要介绍控制文件中最重要的部分——字段列表,字段列表的作用是把数据文件中的记录和数据库中表的列对应起来,下面是字段列表的一个例子,本篇我们将一一讲解它们的意思. . . . 1 (hiredate SYSDATE, 2 deptno POSITION(1:2) INTEGER EXTERNAL(2) NULLIF deptno=BLANKS, 3 job POSITION(7:14) CHAR TERMINATED BY W

SQL*Loader之CASE1

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