Oraclei外部表(External Table)的使用

王朝oracle·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

什么是外部表?

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

创建的语法类似于: "CREATE TABLE ... ORGANIZATION EXTERNAL"

数据在数据库的外部组织,是操作系统文件。

操作系统文件在数据库中的标志是通过一个逻辑目录来映射的。

数据是只读的。(外部表相当于一个只读的虚表)

不可以在上面运行任何DML操作,不可以创建索引。

可以查询操作和连接。可以并行操作。

例子:

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

1平面文件数据的描述

假设如下的两个平面文件

1.dat:

Code: [Copy to clipboard]

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:

Code: [Copy to clipboard]

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创建一个逻辑目录并进行适当授权:

Code: [Copy to clipboard]

SQL CREATE DirectorY TESTDIR AS 'D:\TEMP\';

目录已创建。

SQL GRANT READ ON DIRECTORY TESTDIR TO DEMO;

授权成功。

SQL GRANT WRITE ON DIRECTORY TESTDIR TO DEMO;

授权成功。

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

3创建外部表

Code: [Copy to clipboard]

SQL ED

已写入文件 afiedt.buf

1CREATE TABLE DEMO.EXT

2(emp_id number(4),

3 ename varchar2(12),

4 job varchar2(12) ,

5 mgr_idnumber(4) ,

6 hiredate date,

7 salary number(8),

8 comm number(8),

9 dept_id number(2))

10 [color=blue] ORGANIZATION EXTERNAL[/color]

11([color=blue]TYPE ORACLE_LOADER[/color]

12DEFAULT DIRECTORY TESTDIR

13Access PARAMETERS(RECORDS DELIMITED BY NEWLINE

14FIELDS TERMINATED BY ',')

15* LOCATION('1.DAT','2.DAT'))

SQL /

表已创建。

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

Code: [Copy to clipboard]

SQL select * from DEMO.EXT;

EMP_ID ENAME JOB MGR_ID HIREDATESALARY COMM DEPT_ID

------ ------- ---------- ------- --------- -------- ---------- -------

7369 SMITH CLERK 7902 17-DEC-80100020

7499 ALLEN SALESMAN7698 20-FEB-81250030

7521 WARDSALESMAN7698 22-FEB-81450030

7566 JONES MANAGER 7839 02-APR-81 1150020

7654 MARTINSALESMAN7698 28-SEP-81 1250030

7698 BLAKE MANAGER 7839 01-MAY-81 1550030

7934 MILLERCLERK 7782 23-JAN-82 3500010

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

Code: [Copy to clipboard]

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

2FROM

3DBA_EXTERNAL_TABLES;

OWNERTABLE_NAMEDEFAULT_DIRECTORY_NAME ACCESS_PARAMETERS

------------------ ------------------------------ ------------------------------

DEMOEXTTESTDIR RECORDS DELIMITED BY NEWLINE

FIELDS TERMINATED BY ','

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

Code: [Copy to clipboard]

SQL desc DBA_EXTERNAL_LOCATIONS;

名称

-----------------------------------------

OWNER

TABLE_NAME

LOCATION

DIRECTORY_OWNER

DIRECTORY_NAME

SQLselect * from DBA_EXTERNAL_LOCATIONS;

OWNER TABLE_NAME LOCATIONDIRDIRECTORY_NAME

------------------------------------------------------------------------

DEMO EXT 1.DAT SYSTESTDIR

DEMO EXT 2.DAT SYS TESTDIR

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航