外部表有一些限制——不能从Oracle内更新或删除外部表中的行,不能对外部表创建索引
可以通过ORACLE_DATAPUMP访问驱动程序使用外部表把数据从表中卸载到外部文件
访问外部数据
访问外部文件:首先必须使用CREATE DIRECTORY命令定义一个指向外部文件的位置的目录对象,需要访问外部文件的用户必须具有访问相应目录的READ权限
如:create directory book_dir as '/u01/external'; grant read ,write on directory book_dir to hr;
SQL*LOADER使用程序
创建外部表
既然外部数据可用并可以访问,就可以创建一个访问它的表结构,需要使用create table 命令的ORGANIZATION EXTERNAL子句,在该子句中,可以指定数据结构
如:
create table bookshelf_ext
(
title varchar2(100),
publisher varchar2(100)
)
organization external
(
type oracle_loader
default directory book_dir
access parameters(records delimited by newline
fields terminated by "~"
(title char(100),
publisher char(200)
)
)
location('bookshelf_dump.lst')
);
可以查询USER_EXTERNAL_TABLES 数据字典视图,得到外部表的相关信息,这些信息包括默认目录和访问定义
USER_EXTERNAL_TABLES不显示表所引用的外部文件名,为了查看外部文件的信息,应查询USER_EXTERNAL_LOCATIONS;
外部表创建选项
在ORGANIZATION EXTERNAL子句中,有4个主要子选项:TYPE、DEFAULT DIRECTORY、ACCESS PARAMETERS和LOCATION.
1.TYPE
对于外部表,访问驱动程序是用来转换外部数据的API,可将TYPE ORACLE_LOADER用于外部表,如果正在使用Data Pump,或者在创建外部表时正在加载外部表,则可以使用ORACLE_DATAPUMP。如果使用AS子查询子句从数据库卸载数据,然后重新加载,就必须使用ORACLE_DATAPUMP访问驱动程序,默认的驱动程序是TYPE ORACLE_LOADER访问驱动程序