ITPub博客

首页 > 数据库 > Oracle > oracle 外部表使用

oracle 外部表使用

原创 Oracle 作者:witty_sun 时间:2014-12-19 19:41:37 0 删除 编辑
外部表只能在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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-04-07

  • 博文量
    5
  • 访问量
    21949