SQL*Loader之CASE10

CASE10

1. SQL脚本

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

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

rem do all cleanup

drop table orders;
drop table customers;
drop type item_list_type;
drop type item_type;
drop type customer_type;

rem Create an ORDER record that has a VARRAY for the items that comprise the
rem order and has a reference field to a record in the CUSTOMER table for
rem the customer placing the order.

rem create customer type

create type customer_type as object (
  cust_no   char(5),
  name      char(20),
  addr      char(20)
);
/

rem create object table for customer type

create table customers of customer_type
        (primary key (cust_no))
        object id primary key;

rem create type for order items

create type item_type as object (
  item      varchar(50),
  cnt       number,
  price     number(7,2)
);
/

rem create varray type for order items

create type item_list_type as varray (1000) of item_type;
/

rem create orders table with varray for items and ref to object table

create table orders (
  order_no      char(5),
  cust          ref customer_type references customers,
  item_list     item_list_type
);

exit;
/

2. 控制文件

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

-- Copyright (c) 1991, 2004 Oracle.  All rights reserved.
-- NAME
-- ulcase10.ctl - SQL*Loader Case Study 10: Loading REF Fields and VARRAYs
--
-- DESCRIPTION
-- This case study demonstrates the following:
--
-- Loading a customer table that has a primary key as its OID and
-- stores order items in a VARRAY.
--
-- Loading an order table that has a reference to the customer table and
-- the order items in a VARRAY.
--
-- TO RUN THIS CASE STUDY:
-- 1. Before executing this control file, log in to SQL*Plus as
--    scott/tiger. Enter @ulcase10 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=ulcase1.ctl0 LOG=ulcase10.log
--
-- NOTES ABOUT THIS CONTROL FILE
-- cust_no and item_list_count are FILLER fields. The FILLER field is
-- assigned values from the data field to which it is mapped.
--
-- The cust field is created as a REF field.
--
-- item_list is stored in a VARRAY.
--
-- The second occurrence of item_list identifies the datatype of each
-- element of the VARRAY. Here, the datatype is COLUMN OBJECT.
--
-- The listing of item, cnt, price shows all attributes of the column
-- object that are loaded for the VARRAY. The list is enclosed in parentheses.
--
-- The data is contained in the control file and is preceded by the
-- BEGINDATA parameter.
--
LOAD DATA
INFILE *
CONTINUEIF THIS (1) = ‘*‘

INTO TABLE customers
REPLACE
FIELDS TERMINATED BY ","
(
  cust_no                       CHAR,
  name                          CHAR,
  addr                          CHAR
)

INTO TABLE orders
REPLACE
FIELDS TERMINATED BY ","
(
  order_no                      CHAR,
  cust_no             FILLER    CHAR,
  cust                          REF (CONSTANT ‘CUSTOMERS‘, cust_no),
  item_list_count     FILLER    CHAR,
  item_list                     VARRAY COUNT (item_list_count)
  (
    item_list                   COLUMN OBJECT
    (
      item                      CHAR,
      cnt                       CHAR,
      price                     CHAR
    )
  )
)

BEGINDATA
*00001,Spacely Sprockets,15 Space Way,
*00101,00001,2,
*Sprocket clips, 10000, .01,
 Sprocket cleaner, 10, 14.00
*00002,Cogswell Cogs,12 Cogswell Lane,
*00100,00002,4,
*one quarter inch cogs,1000,.02,
*one half inch cog, 150, .04,
*one inch cog, 75, .10,
 Custom coffee mugs, 10, 2.50

执行后结果:

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

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

SQL> select * from customers;

CUST_ NAME           ADDR
----- -------------------- --------------------
00001 Spacely Sprockets    15 Space Way
00002 Cogswell Cogs       12 Cogswell Lane

SQL> desc orders
 Name                       Null?    Type
 ----------------------------------------- -------- ----------------------------
 ORDER_NO                        CHAR(5)
 CUST                            REF OF CUSTOMER_TYPE
 ITEM_LIST                        ITEM_LIST_TYPE

SQL> select order_no from orders;

ORDER
-----
00101
00100

SQL> select cust from orders;

CUST
--------------------------------------------------------------------------------
00003C038A0038035D767AE692347EE050A8C00D0209980000001726010001000100290000000000
0C0100050100002A00078401FE0000000D053030303031

00003C038A0038035D767AE692347EE050A8C00D0209980000001726010001000100290000000000
0C0100050100002A00078401FE0000000D053030303032

SQL> select item_list from orders;

ITEM_LIST(ITEM, CNT, PRICE)
--------------------------------------------------------------------------------
ITEM_LIST_TYPE(ITEM_TYPE(‘Sprocket clips‘, 10000, .01), ITEM_TYPE(‘Sprocket clea
ner‘, 10, 14))

ITEM_LIST_TYPE(ITEM_TYPE(‘one quarter inch cogs‘, 1000, .02), ITEM_TYPE(‘one hal
f inch cog‘, 150, .04), ITEM_TYPE(‘one inch cog‘, 75, .1), ITEM_TYPE(‘Custom cof
fee mugs‘, 10, 2.5))

查看日志文件:

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

SQL*Loader: Release 11.2.0.1.0 - Production on Fri Sep 19 04:02:40 2014

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

Control File:   ulcase10.ctl
Data File:      ulcase10.ctl
  Bad File:     ulcase10.bad
  Discard File:  none specified

 (Allow all discards)

Number to load: ALL
Number to skip: 0
Errors allowed: 50
Bind array:     64 rows, maximum of 256000 bytes
Continuation:   1:1 = 0X2a(character ‘*‘), in current physical record
Path used:      Conventional

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

   Column Name                  Position   Len  Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
CUST_NO                             FIRST     *   ,       CHARACTER
NAME                                 NEXT     *   ,       CHARACTER
ADDR                                 NEXT     *   ,       CHARACTER            

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

   Column Name                  Position   Len  Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
ORDER_NO                             NEXT     *   ,       CHARACTER
CUST_NO                              NEXT     *   ,       CHARACTER
  (FILLER FIELD)
CUST                              DERIVED                 REF
    Arguments are:
        CONSTANT ‘CUSTOMERS‘
        CUST_NO
ITEM_LIST_COUNT                      NEXT     *   ,       CHARACTER
  (FILLER FIELD)
ITEM_LIST                         DERIVED     *           VARRAY
    Count for VARRAY
        ITEM_LIST_COUNT

*** Fields in ITEM_LIST
ITEM_LIST                         DERIVED     *           COLUMN OBJECT        

*** Fields in ITEM_LIST.ITEM_LIST
ITEM                                FIRST     *   ,       CHARACTER
CNT                                  NEXT     *   ,       CHARACTER
PRICE                                NEXT     *   ,       CHARACTER
*** End of fields in ITEM_LIST.ITEM_LIST

*** End of fields in ITEM_LIST

Table CUSTOMERS:
  2 Rows successfully loaded.
  0 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 ORDERS:
  2 Rows successfully loaded.
  0 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.

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

Total logical records skipped:          0
Total logical records read:             2
Total logical records rejected:         0
Total logical records discarded:        0

Run began on Fri Sep 19 04:02:40 2014
Run ended on Fri Sep 19 04:02:41 2014

Elapsed time was:     00:00:01.33
CPU time was:         00:00:00.23
时间: 2024-10-09 04:18:11

SQL*Loader之CASE10的相关文章

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: