ITPub博客

首页 > 数据库 > Oracle > CUUG 外部表学习笔记

CUUG 外部表学习笔记

原创 Oracle 作者:murkey 时间:2014-01-04 12:21:24 0 删除 编辑

oracle 外部表
一、创建外部表以及产生
1.创建一个directory,需要有create any directory权限
create directory ext as 'D:/';

2.赋予权限
grant read,write on directory ext to scott;

3.创建外部表
create table ext_emp
organization external
( type oracle_datapump
default directory ext
location ('ext_emp.dmp')
)
as select * from emp;


4.查询
select * from ext_emp;


5.修改文件,再次查询测试

SQL> /
select * from ext_emp
              *
第 1 行出现错误:
ORA-29913: 执行 ODCIEXTTABLEOPEN 调出时出错
ORA-29400: 数据插件错误KUP-11010: unable to open at least one dump file for
fetch

 

二、使用已经产生了pump文件创建外部表

1,把产生的 dmp dmp文件复制到其它主机上


2.创建一个directory,需要有create any directory权限
create directory ext2 as 'C:\app\YanWei\';

3.赋予权限
grant read,write on directory ext2 to scott;

4.创建外部表

create table emp_ext3
(
empno number(4),
ename varchar2(10),
job varchar2(9),
mgr number(4),
hiredate date,
sal number(7,2),
comm number(7,2),
deptno number(2)
)
organization external
(type oracle_datapump
default directory ext2
location ('1.DMP')
)

如果基表发生变化,如何更新,删除dmp和外部表,然后导出创建一遍


三、创建外部表,有三个导出文件。


create table ext_emp1
organization external
( type oracle_datapump
default directory ext
location ('ext_emp1.dmp''ext_emp2.dmp','ext_emp3.dmp')
)
as select * from emp;

 


---------------》外部表引用的dmp和expdp导出dmp内部格式还是不一样的,因此不能公用

四、sqlldr引擎的外部表

使用SQLLDR提供外部表的定义并创建外部表
关于SQL*Loader的使用请参照:SQL*Loader使用方法
我们使用SQL*Loader和下面的这个控制文件来生成外部表的定义
$ cat demo1.ctl
LOADDATA
INFILE*
INTOTABLEDEPT_NEW
FIELDS TERMINATEDBY','
(DEPTNO,DNAME,LOC)
BEGINDATA
10,Sales,Virginia
20,Accounting,Virginia
30,Consulting,Virginia
40,Finance,Virginia        
赋予相应的权限和创建表
SQL>grant create any directory to scott;
SQL>grant drop any directory to scott;
SQL>create table dept_new
2 (deptno number,dname varchar2(20),loc varchar2(25));
执行sqlldr命令
$ sqlldr scott/tiger control=demo1.ctl external_table=generate_only
EXTERNAL_TABLE参数有以下三个值:
NOT_USED:默认值。
EXECUTE:这个值说明SQLLDR不会生成并执行一个SQLINSERT语句;而是会创建一个外部表,且使用一个批量SQL语句来加载。
GENERATE_ONLY:使SQLLDR并不具体加载任何数据,而只是会生成所执行的SQL DDL和DML语句,并放到它创建的日志文件中。
注:DIRECT=TRUE覆盖EXTENAL_TABLE=GENERATE_ONLY。如果指定了DIRECT=TRUE,则会加载数据,而不会生成外部表。


文件文件
179,Charles,6835.5,04-JAN-00
180,Winston,3528,24-JAN-98
181,Jean,3417.75,23-FEB-98
182,Martha,2756.25,21-JUN-99
183,Girard,3087,03-FEB-00
184,Nandita,4630.5,27-JAN-96
185,Alexis,4520.25,20-FEB-97
186,Julia,3748.5,24-JUN-98
187,Anthony,3307.5,07-FEB-99
188,Kelly,4189.5,14-JUN-97
189,Jennifer,3969,13-AUG-97
189,ERROR,3969,13-AUGs-9722
189,ERROR,3969S,13-AUG-9722


CREATE TABLE hr.sqlldr
(
  "EMPLOYEE_ID" NUMBER(6),
  "FIRST_NAME" VARCHAR2(20),
  "SALARY" NUMBER(8,2),
  "HIRE_DATE" DATE
)
ORGANIZATION external
(
  TYPE oracle_loader
  DEFAULT DIRECTORY datamove
  ACCESS PARAMETERS
  (
    RECORDS DELIMITED BY NEWLINE CHARACTERSET US7ASCII
    LOAD WHEN ("EMPLOYEE_ID" != "188")
    BADFILE 'cardata.bad'
    DISCARDFILE 'cardata.dsc'
    LOGFILE 'cardata.log'
    READSIZE 1048576
    FIELDS TERMINATED BY "," LDRTRIM
    MISSING FIELD VALUES ARE NULL
    REJECT ROWS WITH ALL NULL FIELDS
    (
      "EMPLOYEE_ID" CHAR(255)
        TERMINATED BY ",",
      "FIRST_NAME" CHAR(255)
        TERMINATED BY ",",
      "SALARY" CHAR(255)
        TERMINATED BY ",",
      "HIRE_DATE" CHAR(255)
        TERMINATED BY ","
        DATE_FORMAT DATE MASK "DD-MON-YY"
    )
  )
  location
  (
    'cardata.txt'
  )
)REJECT LIMIT UNLIMITED


可以追加数据。

 

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

上一篇: oracle 外部表
请登录后发表评论 登录
全部评论

注册时间:2008-07-29

  • 博文量
    137
  • 访问量
    558567