外部表可以像其它表一样,用select语句作查询。但不能做DML操作,不能建index,不接受约束。这是因为它不是以段的形式存于数据库中,只是以数据字典构造存在,指向一个或多个操作系统文件。
外部表的使用涉及到目录的概念——是DBA在数据库中创建的指向物理路径的目录。
1. 创建时不会验证目录是否存在或是否有相关目录的权限。若不存在或没权限,则使用目录时报错。
2. 目录归sys所有,即使scott有目录的创建权限,是目录的创建者,但也不能删除目录。
- 目录授权
conn / as sysdba
grant create any directory to scott;
select * from all_directories where directory_name='SCOTT_DIR';
OWNER DIRECTORY_NAME DIRECTORY_PATH
------------------------------ ------------------------------ ---------------
SYS SCOTT_DIR K:\DB\script
- 目录创建
create or replace directory ext_dir as 'K:/DB/script';
- 外部表创建
create table t_ext_tab(id char(1),name char(6))
organization external(
type oracle_loader
default directory scott_dir
access parameters(
records delimited by newline
fields terminated by '#'
)
location ('ext.tab')
);
ext.tab里的内容如下:
1#tough1
2#tough2
3#tough3
- 外部表查询:
select * from t_ext_tab;
ID | NAME |
1 | tough1 |
2 | tough2 |
3 | tough3 |
- 不可以对外部表进行DML操作
SQL> insert into t_ext_tab values (1,'Tough4');
insert into t_ext_tab values (1,'Tough4')
*
第 1 行出现错误:
ORA-30657: 操作在外部组织表上不受支持SQL> update t_ext_tab set name='Tough';
update t_ext_tab set name='Tough'
*
第 1 行出现错误:
ORA-30657: 操作在外部组织表上不受支持SQL> delete from t_ext_tab;
delete from t_ext_tab
*
第 1 行出现错误:
ORA-30657: 操作在外部组织表上不受支持
此文只是介绍了oracle外部表的简单用法。还有很多关于外部表的用法可以参考:
http://docs.oracle.com/cd/B14117_01/server.101/b10825/et_params.htm