oracle使用sql文件创建表,使用SQL*Loader创建外部表之一

使用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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值