外部表只能在Oracle 9i之后来使用。外部表,是指不存在于数据库中的表。通过向Oracle提供描述外部表的元数据,我们可以把一个操作系统文件当成一个只读的数据库表,就像这些数据存储在一个普通数据库表中一样来进行访问。外部表是对数据库表的延伸。
(1) 位于文件系统之中,按一定格式分割(本实验如逗号‘,’),如文本文件或者其他类型的表可以作为外部表。
(2) 对外部表的访问可以通过SQL语句来完成,而不需要先将外部表中的数据装载进数据库中。
(3) 外部数据表都是只读的,因此在外部表不能够执行DML操作,也不能创建索引。
(4) ANALYZE语句不支持采集外部表的统计数据,应该使用DMBS_STATS包来采集外部表的统计数据。
(5) 可以查询操作和连接。可以并行操作。
(6) 数据在数据库的外部组织,是操作系统文件。
(7) 操作系统文件在数据库中的标志是通过一个逻辑目录来映射的。
需要补充的是,最后有一句“reject limit unlimited”,告诉Oracle这个外部表没有行数限制。否则,当文件中的数据量超过200万行时,在对表进行检索时,就会出现ORA-30653,“reject limit reached”错误
测试
su - oracle
mkdir -p /u01/test/extend_dir --新建目录os级别
SQL> create directory extend_dir as '/u01/test/extend_dir'; 新建目录对象,db级别
vi extend_table 里边写数据,
1 ,this is a extend_table
2 ,xxxxxx
3 ,cccccc
SQL> create table extend_table (col_1 number,col2 varchar2(512))
2 organization external
3 (type oracle_loader
4 default directory extend_dir
5 access parameters (fields terminated by ',')
6 location('extend_table')
7 )reject limit unlimited;
Table created.
查看结果----外部表
SQL> select * from extend_table;
COL_1 COL2
---------- ------------------------------
1 this is a extend_table
2 xxxxxx
3 cccccc
外部表是只读的,通过数据库只能查看,不能ddl
SQL> insert into extend_talbe values (4,'aaaaa');
insert into extend_talbe values (4,'aaaaa')
*
ERROR at line 1:
ORA-30657: operation not supported on external organized table
所以只能在OS级别 通过修改外部表的那个文件来改变外部表的数据。
$ vi extend_table
1, this is a extend_table
2, xxxxxx
3, cccccc
4,aaaaa
5,bbbbb
SQL> select * from extend_table;
COL_1 COL2
---------- ------------------------------
1 this is a extend_table
2 xxxxxx
3 cccccc
4 aaaaa
5 bbbbb
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29593481/viewspace-1373674/
,如需转载,请注明出处,否则将追究法律责任。