`

学习掌握oracle外表(external table)

阅读更多
外表(external table)就像普通的表对像一样,可以select等,只是它是只读的,数据库中只保存了表结构的描述,表数据却没有存放在数据库内,而是存放在了文件系统上。当用户想偶尔使用数据库外的结构化数据时,用起外表来就非常方便,甚至比sqlldr都要方便的多。
外部表是在数据库以外的文件系统上存储的只读表,例如EXCEL、CSV等文件
第一步:创建目录并授权。目录是数据文件的存放目标,数据文件通常要求是文本文件。这个过程在9i以前是需要配置utl_file_dir参数的。
(转http://www.blogjava.net/wxqxs/archive/2008/10/13/237180.html?opt=admin)
    建立外部表的步骤如下:

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

    2、创建一个Directory:
    create directory TestTable_dir as 'D:\Test' ;

    3、创建一个外部表:
    create table TestTable(

       ID varchar2 ( 10 ),

       NAME varchar2 ( 20 ),

       TYPE varchar2 ( 20 ),

       AGE varchar2 ( 20 ) )

    organization external (

       type oracle_loader

       default directory TestTable_dir

       access parameters (fields terminated by ',' )

       location ( 'TestTable.csv' )

       );


    需要注意两点:
    ● 使用number类型时须发查询数据(不知道为什么)
    ● 在建csv表时无需加表头,否则会多出一行数据来


各类参数说明

    1、type oracle_loader

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

    2、defaultdirectory TestTable_dir
       location ('TestTable.csv')

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

    3、accessparameters

      设置转换参数,例如(fields terminated by',') 表示以','为字段间的分隔符
      ● 参数由访问驱动程序定义


外部表的错误处理

    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

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

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

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

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

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

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

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外部表Externaltable[借鉴].pdf

    "Oracle 外部表(External table)" Oracle 外部表(External table)是一种特殊的表类型,它允许 Oracle 数据库将一个普通的文本格式的操作系统文件看作是一个数据库表,可以象普通表一样进行 select 操作,可以建...

    ORACLE Rename Table的语法

    ORACLE Rename Table 语法详解 在 ORACLE 中,重命名(Rename)一个表的命令是 ALTER TABLE old_name RENAME TO new_name,而不是 RENAME old_name TO new_name。 REname 命令只是 SQL*Plus 的命令,不能在其他程序...

    Oracle Table Form Trigger

    总之,Oracle Table Form Trigger是Oracle数据库应用开发的核心元素,理解并熟练掌握这三者,对于构建高效、安全的数据库应用程序至关重要。通过学习和实践提供的文件,开发者可以更深入地理解这一领域,提升数据库...

    oracle中truncate table后的数据恢复

    在Oracle数据库中,`TRUNCATE TABLE`是一个用于删除表中所有数据的命令,它与`DELETE`语句不同,不记录任何删除操作,并且在大多数情况下执行速度更快。然而,一旦执行`TRUNCATE TABLE`,数据通常无法通过常规的...

    oracle nested table demo

    通过“Oracle Nested Table Demo”,我们可以学习如何创建、插入和查询嵌套表,以及理解其在实际应用中的优势。这个示例是理解和实践Oracle高级数据类型的一个好起点,对于希望深入了解Oracle数据库特性的开发者来说...

    Oracle ERP R12 Table

    Oracle ERP R12 Table Oracle ERP R12是Oracle公司推出的第十二个版本的企业资源规划(Enterprise Resource Planning)系统,...了解并掌握这些表的使用,是充分利用Oracle ERP R12功能,提升企业管理水平的关键步骤。

    完全掌握Oracle

    《完全掌握Oracle》是一套全面深入的Oracle应用开发教程,旨在帮助初学者和有经验的开发者深化对Oracle数据库系统的理解,提升在实际工作中的技能。本教程覆盖了Oracle的广泛知识领域,包括基础操作到高级特性的应用...

    从零开始学习ORACLE

    对于初学者来说,从零开始学习Oracle需要掌握一系列的基础知识,这些知识涵盖了数据库的基本概念、Oracle的架构、SQL语言以及数据库管理等方面。 首先,理解数据库的基本概念至关重要。数据库是一个组织和存储数据...

    java操作Oracle数据库——ARRAY、TABLE类型批量入库

    Oracle数据库提供了一些高级数据类型,如ARRAY(数组)和TABLE(表),这些数据类型允许我们进行批量数据操作,从而提高性能。本文将深入探讨如何利用Java操作Oracle数据库中的ARRAY和TABLE类型,实现批量入库。 ...

    oracle 学习心得与总结

    Oracle数据库是世界上最广泛使用的数据库系统之一,尤其在企业级应用中占据着重要地位。学习Oracle不仅可以提升数据库管理技能,还能为...通过不断的实践和学习,才能真正掌握Oracle的精髓,成为合格的数据库管理员。

    Analyze_Oracle_Table.rar_Table_analyze orac_analyze orac_oracle

    "Analyze_Oracle_Table.rar"这个压缩包文件的主题聚焦于Oracle表的分析,目的是提升查询和执行操作的效率。Oracle的性能可能会因为各种因素而下降,例如索引未被有效利用、数据分布不均匀或者统计信息过时等。因此,...

    ORACLE ERP常用TABLE说明.doc

    ORACLE ERP常用TABLE说明.doc

    oracle学习总结(适合刚学习oracle的人)

    3. **SQL基础**:学习Oracle必须掌握SQL(结构化查询语言),包括SELECT用于查询数据,INSERT用于插入数据,UPDATE用于修改数据,DELETE用于删除数据,以及DDL(数据定义语言)如CREATE TABLE用于创建表,DROP用于...

    Oracle中聚簇表Cluster Table使用图文详解

    Cluster是存储一组table的一种方法,这些table共享同一数据块中的某些相同column,并把不同table在这一共享column上值相同的data row存储到同一block上。在sql server中的cluster index强制行根据index key按存储...

    Oracle学习资料.zip

    本压缩包"Oracle学习资料.zip"显然是针对Oracle数据库的学习资源,旨在帮助初学者和进阶者深入理解和掌握Oracle的相关知识。 首先,Oracle数据库的基础概念是学习的起点。这包括理解数据库是什么,以及Oracle数据库...

    oracle学习资料6本合集

    这份"oracle学习资料6本合集"提供了一套全面的学习资源,涵盖了Oracle的基础、进阶以及性能优化等多个方面,对于想要深入理解Oracle数据库的人来说是一份宝贵的资料。 首先,"Oracle8i_9i数据库基础.pdf"是针对...

    ORACLE EBS R12_Table

    本资料包"ORACLE EBS R12_Table"包含了Oracle EBS R12版本中的表结构详细信息,对于理解EBS系统的数据存储和流程操作至关重要。 Oracle EBS R12的表结构设计是系统性能和数据管理的基础。在数据库层面,EBS使用了...

    Oracle数据库 资料学习

    在Oracle数据库的学习中,你需要掌握以下几个关键知识点: 1. **SQL基础**:Oracle数据库是基于SQL的,因此理解和熟练使用SQL语句是基础,包括SELECT用于查询数据,INSERT用于插入数据,UPDATE用于更新数据,DELETE...

Global site tag (gtag.js) - Google Analytics