Oracle数据加载之外部表的介绍

环境:
服务端:RHEL6.4 + Oracle 11.2.0.4
目录:
一、 创建外部表

二、 加载外部表数据到普通表

三、References

一、 创建外部表

1.1 创建外部表需要的目录

create or replace directory admin as '/u01/jingyu'; 

1.2 创建外部表

drop table dept_external purge;
CREATE TABLE dept_external (
   deptno     NUMBER(6),
   dname      VARCHAR2(20),
   loc        VARCHAR2(25) 
)
ORGANIZATION EXTERNAL
(TYPE oracle_loader
 DEFAULT DIRECTORY admin
 ACCESS PARAMETERS
 (
  RECORDS DELIMITED BY newline
  BADFILE 'ulcase1.bad'
  DISCARDFILE 'ulcase1.dis'
  LOGFILE 'ulcase1.log'
  SKIP 10
  FIELDS TERMINATED BY ","  OPTIONALLY ENCLOSED BY '"'
  (
   deptno     INTEGER EXTERNAL(6),
   dname      CHAR(20),
   loc        CHAR(25)
  )
 )
 LOCATION ('ulcase1.ctl')
)
REJECT LIMIT UNLIMITED;

1.3 创建外部表源文件

创建源文件ulcase1.ctl

LOAD DATA
INFILE *
BADFILE 'sample.bad'
DISCARDFILE 'sample.dsc'
APPEND
INTO TABLE emp
WHEN (57) = '.'
TRAILING NULLCOLS
(deptno, dname, loc)
BEGINDATA
10,ACCOUNTING,NEW YORK
20,RESEARCH,DALLAS
30,SALES,CHICAGO
40,OPERATIONS,BOSTON

这里是把这个ctl文件当作数据文件使用,上面skip=10对应了是跳过前面10行无效信息,从数据行开始读取。

1.4 查询外部表

SQL> select * from dept_external;

    DEPTNO DNAME                LOC
---------- -------------------- -------------------------
        10 ACCOUNTING           NEW YORK
        20 RESEARCH             DALLAS
        30 SALES                CHICAGO
        40 OPERATIONS           BOSTON

二、 加载外部表数据到普通表

2.1 创建普通表

CREATE TABLE dept (
   deptno     NUMBER(6),
   dname      VARCHAR2(20),
   loc        VARCHAR2(25) 
) tablespace dbs_d_jingyu;

2.2 直接插入

insert into dept select * from dept_external;
commit;

2.3 直接路径插入

insert /*+append*/ into dept select * from dept_external;
commit;

一般情况,直接路径插入的效率要高。因为:

  1. Data is appended to the end of the table, rather than attempting to use existing free space within the table.
  2. Data is written directly to the data files, by-passing the buffer cache.
  3. Referential integrity constraints are not considered. *
  4. No trigger processing is performed. *

三、References

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值