`

oracle外部表的使用

 
阅读更多

外部表概述

外部表只能在Oracle 9i之后来使用。简单地说,外部表,是指不存在于数据库中的表。通过向Oracle提供描述外部表的元数据,我们可以把一个操作系统文件当成一个只读的数据库表,就像这些数据存储在一个普通数据库表中一样来进行访问。外部表是对数据库表的延伸。
外部表的特性

位于文件系统之中,按一定格式分割,如文本文件或者其他类型的表可以作为外部表。
对外部表的访问可以通过SQL语句来完成,而不需要先将外部表中的数据装载进数据库中。
外部数据表都是只读的,因此在外部表不能够执行DML操作,也不能创建索引。
ANALYZE语句不支持采集外部表的统计数据,应该使用DMBS_STATS包来采集外部表的统计数据。
创建外部表的注意事项

1.需要先建立目录对象。在建立对象的时候,需要小心,Oracle数据库系统不会去确认这个目录是否真的存在。如果在输入这个目录对象的时候,不小心把路径写错了,那可能这个外 部表仍然可以正常建立,但是却无法查询到数据。由于建立目录对象时,缺乏这种自我检查的机制,为此在将路径赋予给这个目录对象时,需要特别的注意。另外需 要注意的是路径的大小写。在Windows操作系统中,其路径是不区分大小写的。而在Linux操作系统,这个路径需要区分大小写。故在不同的操作系统 中,建立目录对象时需要注意这个大小写的差异。
2.对于操作系统文件的要求
建立外部表时,必须指定操作系统文件所使用的分隔符号。并且该分隔符有且只有一个。创建外部表时,不能含有标题列。如果这个标题信息与外部表的字段类型不一致(如字段内容是number数据类型,而标题信息则是字符型数据,则在查询时就会出错)。如果数据类型恰巧一致的话,这个标题信息Oracle数据库也会当作普通记录来对待。

当Oracle数据库系统访问这个操作系统文件的时候,会在这个文件所在的目录自动创建一个日志文件。无论最后是否访问成功,这个日志文件都会如期建立。查看这个日志文件,可以了解数据库访问外部表的频率、是否成功访问等等。默认情况下,该日志在与外部表的相同directory下产生。
3.在建立临时表时的相关限制
对表中字段的名称存在特殊字符的情况下,必须使用英文状态的下的双引号将该表列名称连接起来。如采用”SalseID#”。
对于列名字中特殊符号未采用双引号括起来时,会导致无法正常查询数据。
建议不用使用特殊的列标题字符
在创建外部表的时候,并没有在数据库中创建表,也不会为外部表分配任何的存储空间。
创建外部表只是在数据字典中创建了外部表的元数据,以便对应访问外部表中的数据,而不在数据库中存储外部表的数据。
简单地说,数据库存储的只是与外部文件的一种对应关系,如字段与字段的对应关系。而没有存储实际的数据。
由于存储实际数据,故无法为外部表创建索引,同时在数据使用DML时也不支持对外部表的插入、更新、删除等操作。
4.删除外部表或者目录对象
一般情况下,先删除外部表,然后再删除目录对象,如果目录对象中有多个表,应删除所有表之后再删除目录对象。
如果在未删除外部表的情况下,强制删除了目录,在查询到被删除的外部表时,将收到"对象不存在"的错误信息。
查询dba_external_locations来获得当前所有的目录对象以及相关的外部表,同时会给出这些外部表所对应的操作系统文件的名字。
如果只是在数据库层面上删除外部表,并不会自动删除操作系统上的外部表文件。
5.对于操作系统平台的限制
不同的操作系统对于外部表有不同的解释和显示方式
如在Linux操作系统中创建的文件是分号分隔且每行一条记录,但该文件在Windows操作系统上打开则并非如此。
建议避免不同操作系统以及不同字符集所带来的影响
例子:
  
  假定有如下的两个数据文件:
  
  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
  
   CREATE TABLE DEMO.EXT
   (emp_id number(4),
   ename varchar2(12),
   job varchar2(12) ,
   mgr_id number(4) ,
   hiredate date,
   salary number(8),
   comm number(8),
   dept_id number(2))
   ORGANIZATION EXTERNAL
   (TYPE ORACLE_LOADER
   DEFAULT DIRECTORY TESTDIR
   ACCESS PARAMETERS(RECORDS DELIMITED BY NEWLINE
   FIELDS TERMINATED BY ',')
   LOCATION('1.DAT','2.DAT'))
 
  
  表已创建。
  
  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 78
39 01-MAY-81 1550 0 30

要得到外部表的有关信息:
    
  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> select * from DBA_EXTERNAL_LOCATIONS;
  
  OWNER TABLE_NAME LOCATION DIR DIRECTORY_NAME
  ------------------------------------------------------------------------
  DEMO EXT 1.DAT SYS TESTDIR
  DEMO EXT 2.DAT SYS TESTDIR

分享到:
评论

相关推荐

    \Oracle 外部表

    ### Oracle 外部表知识点详解 #### 一、外部表的概念及特性 ...总之,Oracle外部表为用户提供了一种高效且灵活的方式来处理文件系统中的数据,减少了数据传输和转换的时间成本,提高了数据处理效率。

    oracle外部表Externaltable[借鉴].pdf

    Oracle 外部表是一种非常有用的功能,它可以帮助我们快速地将外部数据文件加载到 Oracle 数据库中,并且可以使用 Oracle 数据库的 SQL 语言来查询和处理外部数据文件。但是,外部表也有一些限制,例如不能进行 DML ...

    ORACLE建外部表笔记

    通过以上步骤,我们了解了如何在Oracle中创建并使用外部表来直接访问文件系统中的数据文件。外部表不仅可以简化数据导入导出过程,还能有效提高数据处理性能,特别是在处理大量数据时表现得尤为突出。同时,注意合理...

    oracle 外部表语法

    综上所述,Oracle外部表为数据库用户提供了一种高效、灵活的方式来访问和管理非结构化或半结构化数据,同时提供了一系列实用的功能,如错误处理机制和并行处理能力,使其成为处理大量外部数据的强大工具。

    Oracle外部表特性深入浅出

    ### Oracle外部表特性深入浅出 #### 一、外部表概述 外部表是Oracle自9i版本后引入的一个新特性,它不同于传统意义上的数据库表,实际上并不存储在数据库内部,而是指向操作系统中的某个文件。通过定义外部表的元...

    ORACLE外部表学习笔记

    综上所述,Oracle外部表的使用涉及到元数据的定义、外部数据文件的格式和内容、以及数据迁移工具ORACLE_DATAPUMP和SQLLDR的配置与使用。在实际操作中,还需注意数据库版本间的兼容性问题,以及操作系统和Oracle...

    oracle 10g创建外部表

    下面将详细介绍如何在Oracle 10g环境下创建并使用外部表。 1. **外部表的基本概念** - **外部表结构**:外部表与普通表类似,但其数据存储在数据库外部,由Oracle通过外部表驱动程序访问。 - **外部目录**:在...

    Oracle数据库外部表.doc

    ### Oracle数据库外部表详解 #### 一、外部表概述 **外部表(External Tables)**是Oracle数据库中一种特殊的数据存储方式,它允许用户通过普通的SQL查询操作来访问存储在数据库之外的数据文件中的数据。这种设计...

    java导出oracle数据(单表)

    在本资源中,我们将讨论如何使用 Java 语言导出 Oracle 数据库中的单表数据。该资源提供了一个完整的示例代码,展示了如何使用 Java 语言连接 Oracle 数据库,执行导出操作,并处理可能出现的错误。 知识点 1:Java...

    通过MSQL通过视图访问ORACLE中的表

    2. **创建外部表**:在MySQL中,使用`CREATE TABLE ... AS SELECT ...`语句创建一个外部表,该表的定义是Oracle数据库中表的一个副本。这需要在查询中指定Oracle数据库的连接信息,以及要复制的Oracle表的SQL查询。 ...

    如何利用Oracle外部表导入文本文件的数据

     Oracle外部表支持两种类型的驱动:一种是ORACLE_LOADER,外部表的数据必须来源于文件文件,另一种则是ORACLE_DATAPUMP,外部表的数据必须是二进制dump文件,该dump文件是先前将Oracle内部表的数据导入到外部表中...

    oracle数据表导出为word文档

    4. **转换到Word**:在Word中,你可以使用"数据" -> "导入外部数据"功能,导入保存的CSV或HTML文件。Word会将其解析为表格。对于HTML文件,可以直接打开文件,然后复制粘贴到Word文档中。 5. **格式调整**:在Word...

    ORACLE表连接方式分析及常见用法

    6. 索引连接(INDEX JOIN):Oracle 8新增,利用索引来加速连接操作,特别适用于外部表通过索引进行快速定位的情况。 选择合适的连接方式对性能至关重要。优化器(RBO或CBO)会根据数据量、索引和成本估算来决定...

    oracle导入表导入数据实例

    在Oracle数据库管理中,数据导入是一项常见的操作,用于将外部数据加载到数据库中。本实例主要探讨如何使用Oracle的数据导入工具——SQL*Loader,通过控制文件(`.ctl`)来执行这一过程。以下是对"oracle导入表导入...

    Oracle R12 接口表

    接口表是用于在Oracle R12内部模块之间,或者与外部系统进行数据交换的临时存储区。这些表的设计遵循一定的标准和规范,以确保数据的准确传递。在R12中,接口表通常包含以下关键元素: 1. **主键**:用于唯一标识每...

    Oracle中表的连接及其调整.

    - 对另一个表(外部表)的连接列进行哈希运算,然后查找匹配的哈希值。 - 这种方法在内部表可以完全装入内存,且连接列分布均匀时效率最佳。 在进行表连接时,选择正确的连接方式至关重要。Oracle 查询优化器会...

    Oracle查询死锁表

    本文将围绕“Oracle查询死锁表”的主题展开详细讨论,旨在帮助数据库管理员更好地理解和掌握如何检测及解除Oracle中的死锁现象。 ### 一、理解Oracle死锁 #### 1.1 定义 死锁通常发生在两个或更多的事务试图同时...

    etl.rar_Table_etl_etl oracle

    使用ETL进行Oracle外部表操作时,有以下几个重要知识点: 1. **创建外部表**:使用CREATE TABLE语句,指定EXTENDED子句来创建外部表。例如: ``` CREATE TABLE ext_sales ( cust_id NUMBER, prod_id VARCHAR2...

Global site tag (gtag.js) - Google Analytics