[转自] http://blog.chinaunix.net/uid-10697776-id-2935685.html



定义

External tables access data in external sources as if it were in a table in the database.

You can connect to the database and create metadata for the external table using DDL.

The DDL for an external table consists of two parts: one part that describes the Oracle

column types, and another part (the access parameters) that describes the mapping of

the external data to the Oracle data columns.

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

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

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

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

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

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

建立外部表的步骤

1、创建以“,”分隔的文件“TestTable.csv”至“D:\Test”

2、创建一个Directory:

create directory TestTable_diras 'D:\Test' ;

3、创建一个外部表:

create table TestTable(

ID varchar2 ( 10 ),

NAME varchar2 ( 20 ),

TYPE varchar2 ( 20 ),

AGEvarchar2 ( 20 ))

organization external (

type oracle_loader

default directory TestTable_dir

access parameters (fields terminatedby ',' )

location ( 'TestTable.csv' )

);

各类参数说明

1、type oracle_loader

数据转换驱动器,oracle_loader为默认,也可以改换其他

2、defaultdirectory TestTable_dir

location ('TestTable.csv')

指定外部表所在文件夹以及指定文件

3、accessparameters

设置转换参数,例如(fields terminatedby',')表示以','为字段间的分隔符

● 参数由访问驱动程序定义

外部表的错误处理

1、REJECT LIMIT子句

在创建外部表时最后加入LIMIT子句,表示可以允许错误的发生个数。

* 默认的REJECT LIMIT值为0

* REJECT LIMIT UNLIMITED则不会报错

2、BADFILE 和 NOBADFILE 子句

在accessparameters中加入BADFILE'BAD_FILE.txt'子句,则所有数据转换错误的值会被放入'BAD_FILE.txt'中

使用NOBADFILE子句则表示忽略转换错误的数据

● 如果不写BADFILE或NOBADFILE,则系统自动在源目录下生成与外部表同名的.BAD文件

● BADFILE只能记录前1次操作的结果,他会被第2次操作所覆盖。

3、LOGFILE 和 NOLOGFILE 子句

在accessparameters中加入LOGFILE'LOG_FILE.log'子句,则所有Oracle的错误信息放入'LOG_FILE.log'中

使用NOLOGFILE子句则表示不记录错误信息到log中

● 如果不写LOGFILE或NOLOGFILE,则系统自动在源目录下生成与外部表同名的.LOG文件

修改外部表语句

外部表与堆表一样可以之用ALTER TABLE命令修改表属性

* REJECT LIMIT        --错误数

* DEFAULT DIRECTORY   --默认目录

* ACCESS PARAMETERS   --参数

* LOCATION            --数据文件

* ADD COLUMN          --增加列

* MODIFY COLUMN       --列定义

* DROP COLUMN         --删除列

* RENAME TO           --外部表更名

其他约束

● 外部表无法使用insert、update、delete等操作,要修改其数据只能通过修改数据文件。

● 外部表不能建立索引,如要建立,则需要先create table XX as select * from TestTable

PS:

1.外部表可以加载和卸载数据泵格式的数据,只需把organization external里的参数type设置为oracle_datapump。

create table all_objects_unload

            organization external

                   (

                   type oracle_datapump

                  default directory testdir

                  location('allobjects.dat')

                  )

            as

            select * from all_objects

学习掌握oracle外表(external table)的更多相关文章

  1. Oracle利用external table 查看trace文件

    1. 用下面的语句找到trace文件的路径 select * from v$diag_info where name='Default Trace File'; 2. 创建一个directory用来加 ...

  2. External Table

    CREATE TABLE AS SELECT,使用Oracle9i的External Table  Oracle 9i 的一项新特性就是 External Table,它就象通常的数据库表一样,拥有字 ...

  3. SQL Azure (18) 使用External Table实现垮库查询

    <Windows Azure Platform 系列文章目录> 问题 1.我们在进行SQL Server开发的时候,经常会使用垮库查询.但是在默认情况下,使用Azure SQL Datab ...

  4. Data import/export of Netezza using external table

    Introduction External table is a special table in Netezza system, which could be  used to import/exp ...

  5. 浅谈Oracle函数返回Table集合

    在调用Oracle函数时为了让PL/SQL 函数返回数据的多个行,必须通过返回一个 REF CURSOR 或一个数据集合来完成.REF CURSOR 的这种情况局限于可以从查询中选择的数据,而整个集合 ...

  6. [Oracle]如何观察Table 的各种Lock 之间的冲突

    [Oracle]如何观察Table 的各种Lock 之间的冲突 举例: Session#15 创建表: SID 15==============create table t1 (c1 number)p ...

  7. Lua和C++交互 学习记录之四:全局table交互

    主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...

  8. [转]Greenplum 通过gpfdist + EXTERNAL TABLE 并行导入数据

    摘要: Greenplum 提供了快速导入数据的方法,下面通过一个例子演示给大家. Greenplum 提供了快速导入数据的方法,下面通过一个例子演示给大家. 我们用TPCH测试中最大的表做导入测试 ...

  9. Netezza External Tables --How to use local files in external table

    FROM: http://tennysusantobi.blogspot.com/2012/08/netezza-external-tables.html Netezza External Table ...

随机推荐

  1. Linuc bazaar命令

    一.简介 Bazaar 是一种强大的新一代源代码控制系统,它能够适用于所有主流操作系统,能够适应任何开发团队的工作模式.   二.安装 1)yum方式 yum install -y bzr   三.教 ...

  2. hdu 2519 新生晚会 (求排列组合时容易溢出)

    #include<stdio.h> #include<algorithm> using namespace std; void cal(int n,int m) { ; m=m ...

  3. PHP文件的引用

    require "文件名" 或 include("文件名") 区别:若所包含文件出现错误,include()产生一个警告,require会导致程序终止

  4. 使用Sqlserver事务发布实现数据同步(转)

    出处:http://www.cnblogs.com/daizhj/archive/2009/11/18/1605293.html 事务的功能在sqlserver中由来已久,因为最近在做一个数据同步方案 ...

  5. [GO]结构体及普通变量初始化

    结构体是一种聚合的数据类型,它是由一系列相同类型或者不同类型的数据构成的数据集合,每个数据称为结构体的成员 1.结构体的初始化 package main import "fmt" ...

  6. cad转shapefile文件

    private ESRI.ArcGIS.Controls.AxTOCControl axTOCControl1; private ESRI.ArcGIS.Controls.AxLicenseContr ...

  7. 编写高质量代码改善C#程序的157个建议——建议36:使用FCL中的委托声明

    建议36:使用FCL中的委托声明 FCL中存在3类这样的委托声明,它们分别是:Action.Func.Predicate.尤其是在它们的泛型版本出来以后,已经能够满足我们在实际编码过程中的大部分需求. ...

  8. Linq to SQL Like Operator

    As a response for customer's question, I decided to write about using Like Operator in Linq to SQL q ...

  9. [Lua快速了解一下]Lua的控制语句

    -Lua中没有++或者--的骚操作 -while loop sum = num = do sum = sum + num num = num + end print("sum =" ...

  10. 中介者(Mediator)模式

    中介者(Mediator)模式:用一个中介对象来封装一系列的对象交互,中介者使各个对象不需要显示的相互引用,从而使得耦合松散,而且可以独立的改变他们之间的交互 了解<迪米特法则>的朋友就知 ...