Oracle外部表的使用

时间:2023-03-08 17:45:04

外部表可以像其它表一样,用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