Oracle External Table (1)

来源:互联网 发布:水滴wifi破解软件 编辑:程序博客网 时间:2024/04/19 01:23
External Table是由create table ... organization external语句创建的。4个主要参数:type, default directory, access parameters, location
有两种类型oracle_loader和oracle_datapump。
oracle_loader是默认的,它将数据从外部表导入到内部表。这些数据只能来自文本数据文件。该方法不能将数据从内部表导出到外部表。
oracle_datapump可以导入导出,只能是二进制的dump文件。
在数据文件与外部表之间的转换错误只会导致该行被忽略;而外部表与数据库表之间的转换错误会导致整个导入失败。


外部表的一些限制:
# 不支持含有加密字段(Encrypted column)的导入与导出。
# 外部表不知道保存在数据库中的数据。
# 外部表不知道数据是如何在外部数据源中保存的。这是access parameter的功能。
# 外部表不能导入数据到LONG字段。




一个简单的例子:
1. 创建一个数据文件/tmp/info.dat
56november, 15, 1980  baker             mary       alice     09/01/2004
87december, 20, 1970  roper             lisa       marie     01/01/2002


2. 创建一个directory并授予read/write on权限给test用户
create directory def_dir as '/tmp';
grant read,write on directory def_dir to test;


3. 用test登录并创建一个普通表emp
CREATE TABLE emp (emp_no CHAR(6), last_name CHAR(25), first_name CHAR(20), middle_initial CHAR(1), hire_date DATE, dob DATE);


4. 用test创建一个external table emp_load
create table emp_load
 (employee_number char(5),
  employee_dob char(20),
  employee_last_name char(20),
  employee_first_name char(15),
  employee_middle_name char(15),
  employee_hire_date date)
 organization external
 (type oracle_loader
  default directory def_dir
  access parameters
  (records delimited by newline
   fields (employee_number char(2),
           employee_dob char(20),
           employee_last_name char(18),
           employee_first_name char(11),
           employee_middle_name char(11),
           employee_hire_date char(10) date_format date mask "mm/dd/yyyy"
          )
    )
   location ('info.dat')
 );


5. 从外部表emp_load导入数据到内部表emp
insert into emp (emp_no, first_name, middle_initial, last_name, hire_date, dob)
(select employee_number,
        employee_first_name,
        substr(employee_middle_name, 1, 1),
        employee_last_name,
        employee_hire_date,
        to_date(employee_dob, 'month, dd, yyyy')
from emp_load);


6. 查询结果
select * from emp;


EMP_NO LAST_NAME                 FIRST_NAME           M HIRE_DATE    DOB
------ ------------------------- -------------------- - ------------ ------------
56     baker                     mary                 a 01-SEP-04    15-NOV-80
87     roper                     lisa                 m 01-JAN-02    20-DEC-70