首页 > 数据库 > Oracle > CUUG 外部表学习笔记
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/ ,如需转载,请注明出处,否则将追究法律责任。