首页 > 数据库 > Oracle > 正文

ORACLE9I中外部表的使用

2024-08-29 13:31:12
字体:
来源:转载
供稿:网友
oracle9i中外部表的使用

说明: 这个帖子讲述oracle9i外部表(external table)的初级使用。


什么是外部表?

external table和正规的表很相似,具体的定义可以参见《oracle概念手册》,以下的几点需要注意:

   >创建的语法类似于: "create table ... organization external"
   >数据在数据库的外部组织,是操作系统文件。
   >操作系统文件在数据库中的标志是通过一个逻辑目录来映射的。       
   >数据是只读的。(外部表相当于一个只读的虚表)
   >不可以在上面运行任何dml操作,不可以创建索引。   
   >可以查询操作和连接。可以并行操作。

例子:

假定有如下的两个数据文件:

1 平面文件数据的描述
  假设如下的两个平面文件
  1.dat:

   7369,smith,clerk,7902,17-dec-80,100,0,20
   7499,allen,salesman,7698,20-feb-81,250,0,30
   7521,ward,salesman,7698,22-feb-81,450,0,30
   7566,jones,manager,7839,02-apr-81,1150,0,20


  2.dat:

   7654,martin,salesman,7698,28-sep-81,1250,0,30
   7698,blake,manager,7839,01-may-81,1550,0,30
   7934,miller,clerk,7782,23-jan-82,3500,0,10


   (要有对操作系统中该目录的读写权限。)
    
2 创建一个逻辑目录并进行适当授权:
  

     sql> create directory testdir as 'd:/temp/';
     目录已创建。

     sql> grant read on directory testdir to demo;
     授权成功。

     sql> grant write on directory testdir to demo;
     授权成功。


注意:创建完毕逻辑目录之后要把平面文件拷贝到该目录下,另外还要注意文件名字不要写错。

3 创建外部表

sql> ed
已写入文件 afiedt.buf

  1 create table demo.ext
  2 (emp_id number(4),
  3 ename varchar2(12),
  4 job varchar2(12) ,
  5 mgr_id number(4) ,
  6 hiredate date,
  7 salary number(8),
  8 comm number(8),
  9 dept_id number(2))
10 organization external
11 (type oracle_loader
12 default directory testdir
13 access parameters(records delimited by newline
14 fields terminated by ',')
15* location('1.dat','2.dat'))
sql> /

表已创建。


4 进行select选择操作看看是否正确:
      

      sql> select * from demo.ext;

      emp_id ename job mgr_id hiredate salary comm dept_id
      ------ ------- ---------- ------- --------- -------- ---------- -------
        7369 smith clerk 7902 17-dec-80 100 0 20
        7499 allen salesman 7698 20-feb-81 250 0 30
        7521 ward salesman 7698 22-feb-81 450 0 30
        7566 jones manager 7839 02-apr-81 1150 0 20
        7654 martin salesman 7698 28-sep-81 1250 0 30
        7698 blake manager 7839 01-may-81 1550 0 30
        7934 miller clerk 7782 23-jan-82 3500 0 10




   如果要得到外部表的有关信息:


sql> desc dba_external_tables;

名称
-----------------------------------------------------------------
owner
table_name
type_owner
type_name
default_directory_owner
default_directory_name
reject_limit
access_type
access_parameters

sql> select owner,table_name,default_directory_name,access_parameters
  2 from
  3 dba_external_tables;

owner table_name default_directory_name access_parameters
------------------ ------------------------------ ------------------------------
demo ext testdir records delimited by newline
                                                                 fields terminated by ','


如果dba想要知道平面文件的位置,使用如下的查询:


sql> desc dba_external_locations;
名称
-----------------------------------------
owner
table_name
location
directory_owner
directory_name

sql> select * from dba_external_locations;

owner table_name location dir directory_name
------------------------------------------------------------------------
demo ext 1.dat sys testdir
demo ext 2.dat sys testdir


参考文档:oracle9i database administration guide

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表