数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

Oraclei外部表(External Table)的使用


发布日期:2019年04月30日
 
Oraclei外部表(External Table)的使用

什么是外部表?

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

>创建的语法类似于 CREATE TABLE ORGANIZATION EXTERNAL

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

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

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

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

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

例子

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

平面文件数据的描述

假设如下的两个平面文件

dat

Code: [Copy to clipboard]

SMITHCLERKDEC

ALLENSALESMANFEB

WARDSALESMANFEB

JONESMANAGERAPR

dat

Code: [Copy to clipboard]

MARTINSALESMANSEP

BLAKEMANAGERMAY

MILLERCLERKJAN

(要有对操作系统中该目录的读写权限

创建一个逻辑目录并进行适当授权

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;

授权成功

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

创建外部表

Code: [Copy to clipboard]

SQL> ED

已写入文件 afiedtbuf

CREATE TABLE DEMOEXT

(emp_id number()

ename varchar()

job varchar()

mgr_idnumber()

hiredate date

salary number()

comm number()

dept_id number())

ORGANIZATION EXTERNAL

(TYPE ORACLE_LOADER

DEFAULT DIRECTORY TESTDIR

ACCESS PARAMETERS(RECORDS DELIMITED BY NEWLINE

FIELDS TERMINATED BY )

* LOCATION(DATDAT))

SQL> /

表已创建

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

Code: [Copy to clipboard]

SQL> select * from DEMOEXT

EMP_ID ENAME JOB MGR_ID HIREDATESALARY COMM DEPT_ID

SMITH CLERK DEC

ALLEN SALESMAN FEB

WARDSALESMAN FEB

JONES MANAGER APR

MARTINSALESMAN SEP

BLAKE MANAGER MAY

MILLERCLERK JAN

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

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 OWNERTABLE_NAMEDEFAULT_DIRECTORY_NAMEACCESS_PARAMETERS

FROM

DBA_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

SQL>select * from DBA_EXTERNAL_LOCATIONS;

OWNER TABLE_NAME LOCATIONDIRDIRECTORY_NAME

DEMO EXT DAT SYSTESTDIR

DEMO EXT DAT SYS TESTDIR

               

上一篇:Oracle10g中层次查询简介

下一篇:利用SQL*Loader将 Excel 数据导出到 Oracle 数据库中