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