外部表基本多用于在数据仓库系统,一般数据仓库接收的数据多为DAT类型的文本文件,并且还会备份这些数据文件,这时候如果采用外部表直接进行数据过滤,那么可以省一些数据库的表所占空间。并且外部表用在跨平台数据迁移也是一个相当好用的方法。
Oracle数据库允许以只读方式访问外部表中的数据。允许对外部数据运行任何SQL查询,而无需将外部数据加载到数据库中。使用外部表卸载数据时,将根据SELECT语句中的数据类型自动创建元数据。我们可以使用SQL直接或者并行(parallel)查询外部表数据。例如,可以对外部表做select, join, 或者sort等一些操作 。但是,无法执行DML操作,也无法创建索引。
实战:
1、使用外部表首先得创建一个directory
create directory DIR1 as '/home/oracle/test';
grant read,write,execute on directory DIR1 to ldx_test;
2、基于ORACLE_LOADER
CREATE TABLE test
(
sname varchar2(10),
cname varchar2(10),
sno number,
cno number,
cname1 varchar2(10),
cname2 varchar2(10),
sdate varchar2(20),
corder number,
sorder number
)
ORGANIZATION EXTERNAL
(
TYPE ORACLE_LOADER
DEFAULT DIRECTORY dir1
ACCESS PARAMETERS
(
records delimited by newline
PREPROCESSOR dir1:'uncompress_test.sh'
fields terminated by ','
OPTIONALLY ENCLOSED BY '"'
missing field values are null
)
LOCATION ('test.dat.gz')
)
REJECT LIMIT UNLIMITED;
其中uncompress_test.sh 是shell脚本,里面存放的是解压test.dat.gz的命令,如gunzip -c test.dat.gz
3、基于oracle_datapump
create table test_external
organization external
(
type oracle_datapump
DEFAULT DIRECTORY dir1
LOCATION ('test_external01.dmp','test_external02.dmp')
) parallel 2
as select * from dba_objects where rownum <=10000;
此处LOCATION 中的dmp个数和,parallel的个数相互呼应。
查询结果进行验证
select count(1) from test_external;





