ITPub博客

首页 > 数据库 > Oracle > 使用SQL*Loader创建外部表之一

使用SQL*Loader创建外部表之一

原创 Oracle 作者:skyin_1603 时间:2016-11-02 00:38:57 0 删除 编辑
使用SQL*Loader创建外部表:

---创建目录对象并授权给Scott用户:
SQL> create or replace directory loader_home as '/home/oracle/dirhome';
Directory created.
--授权:
SQL> grant read,write on directory loader_home to scott;
Grant succeeded.

---在scott用户下创建外部表:
SQL> conn scott/tiger
Connected.
SQL> show user
USER is "SCOTT"

--创建外部表:
SQL> create table myloader(
  2  id number(3),
  3  dname varchar2(12),
  4  lname varchar2(10));
Table created.

--查看表结构:
SQL> desc myloader
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER(3)
 DNAME                                              VARCHAR2(12)
 LNAME                                              VARCHAR2(10)

---在操作系统层创建两个存放外部数据的文件:
[oracle@enmo ~]$ cd dirhome/
[oracle@enmo dirhome]$ pwd
/home/oracle/dirhome
[oracle@enmo dirhome]$ 

--创建外部文件1:
[oracle@enmo dirhome]$ vi dt1.csv
10,ACCOUNTING,NEW YORK
20,RESEARCH,DALLAS
30,SALES,CHICAGO
40,OPERATIONS,BOSTON
~
--创建外部文件2:
[oracle@enmo dirhome]$ vi dt2.csv
40,OPERATIONS1,BOSTON0
50,OPERATIONS2,BOSTON9
60,OPERATIONS3,BOSTON8
70,OPERATIONS4444,BOSTON7
~

--查看创建的两个外部文件:
[oracle@enmo dirhome]$ ls
dt1.csv  dt2.csv
[oracle@enmo dirhome]$ ll
total 8
-rw-r--r-- 1 oracle oinstall 80 Nov  1 22:38 dt1.csv
-rw-r--r-- 1 oracle oinstall 95 Nov  1 22:39 dt2.csv
[oracle@enmo dirhome]$ 

--创建外部表控制文件:
[oracle@enmo dirhome]$ 
[oracle@enmo dirhome]$ vi load.ctl
load data
infile 'dt1.csv'
infile 'dt2.csv'
badfile 'load.bad'     #指明坏文件
into table myloader
truncate
fields terminated by ','
(id,dname,lname)
~

--查看控制文件:
[oracle@enmo dirhome]$ ls
dt1.csv  dt2.csv  load.ctl

---导入外部文件到Scott用户下的myloader表:
[oracle@enmo dirhome]$ sqlldr scott/tiger control=load.ctl
SQL*Loader: Release 11.2.0.4.0 - Production on Tue Nov 1 22:54:19 2016
Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

Commit point reached - logical record count 4
Commit point reached - logical record count 8
[oracle@enmo dirhome]$ 

--查看本目录下的文件:
[oracle@enmo dirhome]$ 
[oracle@enmo dirhome]$ ls
dt1.csv  dt2.csv  load.bad  load.ctl  load.log
#多生成了一个load.bad的坏文件,是存放因为不符合导入条件的数据。

--到Scott用户查看表myloader的数据:
SQL> select * from myloader;
        ID DNAME        LNAME
---------- ------------ ----------
        10 ACCOUNTING   NEW YORK
        20 RESEARCH     DALLAS
        30 SALES        CHICAGO
        40 OPERATIONS   BOSTON
        40 OPERATIONS1  BOSTON0
        50 OPERATIONS2  BOSTON9
        60 OPERATIONS3  BOSTON8
7 rows selected.
#通过Scott用户下的SQL查询,发现 外部文件dt2.csv中的ID号为70的数据没有被导入表myloader中。

--尝试读取load.bad文件的额数据:
[oracle@enmo dirhome]$ 
[oracle@enmo dirhome]$ cat load.bad
70,OPERATIONS4444,BOSTON7
#看到因为第二个字段的长度超出了设置的长度,所以没有被导入到表中。

---空值null的处理:
--在Scott用户另外创建一个表hisloader:
SQL> create table hisloader(
  2  id number(3),
  3  dname varchar2(12),
  4  lname varchar2(10));
Table created.

--编辑外部文件dt3.csv以及控制文件:
[oracle@enmo dirhome]$ vi dt3.csv
101,OPERATIONS5,BOSTON1
102,OPERATIONS6,BOSTON2
103,OPERATIONS7
~
#共3条数.

--创建控制文件:
[oracle@enmo dirhome]$ vi load1.ctl
load data
infile 'dt3.csv'
badfile 'load.bad'
into table hisloader
truncate
fields terminated by ','
trailing nullcols
(id,dname,lname)
~

--利用sqlldr将外部数据导入表hisloader中:
[oracle@enmo dirhome]$ sqlldr scott/tiger control=load1.ctl
SQL*Loader: Release 11.2.0.4.0 - Production on Tue Nov 1 23:22:58 2016
Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

Commit point reached - logical record count 3
[oracle@enmo dirhome]$ 
#可到有3条数据导入表中。

--到Scott用户查看hisloader表的数据:
SQL> select * from hisloader;
        ID DNAME        LNAME
---------- ------------ ----------
       101 OPERATIONS5  BOSTON1
       102 OPERATIONS6  BOSTON2
       103 OPERATIONS7
#可以看到含有空值的数据也可以被导入到表hisloader中。

--查看目录下的外部文件:
[oracle@enmo dirhome]$ ll
total 32
-rw-r--r-- 1 oracle oinstall   80 Nov  1 22:38 dt1.csv
-rw-r--r-- 1 oracle oinstall   95 Nov  1 22:39 dt2.csv
-rw-r--r-- 1 oracle oinstall   64 Nov  1 23:18 dt3.csv
-rw-r--r-- 1 oracle oinstall  136 Nov  1 23:21 load1.ctl
-rw-r--r-- 1 oracle oinstall 1588 Nov  1 23:22 load1.log
-rw-r--r-- 1 oracle oinstall   26 Nov  1 22:54 load.bad
-rw-r--r-- 1 oracle oinstall  134 Nov  1 22:50 load.ctl
-rw-r--r-- 1 oracle oinstall 1852 Nov  1 22:54 load.log
[oracle@enmo dirhome]$ 

对于含有控制的数据,就需要在控制文件中添加语句trailing nullcols。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31392094/viewspace-2127480/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2016-09-06

  • 博文量
    231
  • 访问量
    215114