一.外部表特性

数据文件位于操作系统之外,并且具有一定的格式分割的文本文件或其他类型文件.ORACLE的外部表通过SQL的形式访问数据文件中的数据,数据并不需要加载到数据库中且数据是可读的,所以不用DML操作,创建索引

二.创建外部表的步骤

A.创建目录对象,这一点限制数据必须的SERVER端
  B.数据文件的准备,数据文件要求为操作系统之外且固定格式,不能有标题
  C.创建外部表的字段如有特殊字段需用双引号 ”SYS_ID#”
  D.删除外部表及目录,应先删除表后再删除目录

三.创建外部表实列

创建目录:
CREATE OR REPLACE DIRECTORY SQLDR AS 'D:\ORACLE\ORADATA\DATA';

创建外部表:(通过SQLLDR方式的日志产生)
-- CREATE TABLE
CREATE TABLE SYS_SQLLDR_X_EXT_MUREX_GL_TEMP
(
  AREANO   VARCHAR2(20),
  CURRENCY VARCHAR2(20),
  APCODE   VARCHAR2(20),
  ORGCDE   VARCHAR2(20),
  DAMOUNT  VARCHAR2(200),
  CAMOUNT  VARCHAR2(200),
  REMAKR   VARCHAR2(200)
)
ORGANIZATION EXTERNAL
(
  TYPE ORACLE_LOADER
  DEFAULT DIRECTORY SQLDR
  ACCESS PARAMETERS
  (
    RECORDS DELIMITED BY 0X'0A'
        BADFILE 'SQLDR':'MUREX_GLRCN_INIT_BADFILE.DAT'
        DISCARDFILE 'SQLDR':'MUREX_GLRCN_INIT_DISFILE.DAT'
        LOGFILE 'MUREX_GL_TEMP.LOG_XT'
        READSIZE 1048576
        FIELDS TERMINATED BY "|" OPTIONALLY ENCLOSED BY ' ' LDRTRIM
        REJECT ROWS WITH ALL NULL FIELDS
        (
          "AREANO" CHAR(255),
          "CURRENCY" CHAR(255),
          "APCODE" CHAR(255),
          "ORGCDE" CHAR(255),
          "DAMOUNT" CHAR(255),
          "CAMOUNT" CHAR(255),
          "REMAKR" CHAR(255),
        )
  )
  LOCATION (SQLDR:'MUREX_GLRCN_INIT_20190831.DAT')
)
REJECT LIMIT UNLIMITED;

四.SQLLDR产生外部表的DDL语句

在命令运行SQLLDR(控制文件事先要准备好):
A.用SQLLDR生成LOG文件
SQLLDR USER_NAME/PASSWORD@ORADB CONTROL=CONTROL_FILE.CTL EXTERNAL_TABLE=GERNERATE_ONLY;
NOT_USED:默认值。
EXECUTE:这个值说明SQLLDR不会生成并执行一个SQLINSERT语句;而是会创建一个外部表,且使用一个批量SQL语句来加载。
GENERATE_ONLY:使SQLLDR并不具体加载任何数据,而只是会生成所执行的SQL DDL和DML语句,并放到它创建的日志文件中。
注:DIRECT=TRUE覆盖EXTENAL_TABLE=GENERATE_ONLY。如果指定了DIRECT=TRUE,则会加载数据,而不会生成外部表。

D:\ORACLE\ORADATA\DATA>SQLLDR BOC_RWA3/A@RWADB CONTROL=MUREX_GL_TEMP.CTL EXTERNA L_TABLE=GENERATE_ONLY

SQL*LOADER: RELEASE 11.2.0.3.0 - PRODUCTION ON 星期四 9月 12 22:27:03 2013
COPYRIGHT (C) 1982, 2011, ORACLE AND/OR ITS AFFILIATES.  ALL RIGHTS RESERVED.

B.从LOG文件中提取DDL语句
CREATE TABLE "SYS_SQLLDR_X_EXT_MUREX_GL_TEMP"
(
  "AREANO" VARCHAR2(20),
  "CURRENCY" VARCHAR2(20),
  "APCODE" VARCHAR2(20),
  "ORGCDE" VARCHAR2(20),
  "DAMOUNT" VARCHAR2(200),
  "CAMOUNT" VARCHAR2(200),
  "REMAKR" VARCHAR2(200)
)
ORGANIZATION EXTERNAL
(
  TYPE ORACLE_LOADER  --指定外部表的访问方式,9I不支持ORACLE_DATAPUMP
  DEFAULT DIRECTORY SQLDR  --目录
  ACCESS PARAMETERS   --配置外部表参数
  (
    RECORDS DELIMITED BY NEWLINE CHARACTERSET ZHS16GBK  --记录以换行为结束
    BADFILE 'SQLDR':'MUREX_GLRCN_INIT_20130809_BADFILE.DAT'   --存放处理失败的记录文件描述
    DISCARDFILE 'SQLDR':'MUREX_GLRCN_INIT_20130809_DISFILE.DAT' --存放处理丢弃的记录文件描述
    LOGFILE 'MUREX_GL_TEMP.LOG_XT'   --日志文件
    READSIZE 1048576  --ORACLE读取输入数据文件所用的默认缓冲区,此处为MB,如专用模式则从PGA分配,如共享模式  则从SGA分配
    FIELDS TERMINATED BY "|" OPTIONALLY ENCLOSED BY " " LDRTRIM   --"|"描述字段的终止符, " "作用符
    REJECT ROWS WITH ALL NULL FIELDS   -- --所有为空值的行被跳过并且记录到BAD FILE
    (                                                                            ---下面是描述外部文件各个列的定义
      "AREANO" CHAR(255)
        TERMINATED BY "|" OPTIONALLY ENCLOSED BY " ",
      "CURRENCY" CHAR(255)
        TERMINATED BY "|" OPTIONALLY ENCLOSED BY " ",
      "APCODE" CHAR(255)
        TERMINATED BY "|" OPTIONALLY ENCLOSED BY " ",
      "ORGCDE" CHAR(255)
        TERMINATED BY "|" OPTIONALLY ENCLOSED BY " ",
      "DAMOUNT" CHAR(255)
        TERMINATED BY "|" OPTIONALLY ENCLOSED BY " ",
      "CAMOUNT" CHAR(255)
        TERMINATED BY "|" OPTIONALLY ENCLOSED BY " ",
      "REMAKR" CHAR(255)
        TERMINATED BY "|" OPTIONALLY ENCLOSED BY " "
    )
  )
  LOCATION
  (
    'MUREX_GLRCN_INIT_20130809.DAT'   --描述外部文件的文件名
  )
)REJECT LIMIT UNLIMITED           --描述允许的错误数,此处为无限制
;

WINDOWS换行是\r\n,十六进制数值是:0D0A
LINUX换行是\n,十六进制数值是:0A

所以我们确定分隔符先用UE查看分隔符,然后再改动创建外部表的语句,否则会加载不成功
由于在源文件换行符为0A,所以换行符应改为:
RECORDS DELIMITED BY 0X'0A'   -- 0X表示十六进行,0A为LINUX换行符.
所以此方法适用于确定换行符.

五.外部表定义的几个重点
A.ORGANIZATIONEXTERNAL关键字,必须要有。以表明定义的表为外部表。
B.重要参数外部表的类型
ORACLE_LOADER:定义外部表的缺省方式,只能只读方式实现文本数据的装载。
ORACLE_DATAPUMP:支持对数据的装载与卸载,数据文件必须为二进制DUMP文件。可以从外部表提取数据装载到内部表,也可以从内部表卸载数据作为二进制文件填充到外部表。
C.DEFAULTDIRECTORY:缺省的目录指明了外部文件所在的路径
D.LOCATION:定义了外部表的位置
F.ACCESS PARAMETERS:描述如何对外部表进行访问
RECORDS关键字后定义如何识别数据行  
DELIMITEDBY'XXX'——换行符,常用NEWLINE定义换行,并指明字符集。对于特殊的字符则需要单独定义,如特殊符号,可以使用OX'十六位值',例如TAB(/T)的十六位是9,则DELIMITEDBY0X'09';CR(/R)的十六位是D,那么就是DELIMITEDBY0X'0D'。 SKIP X ——跳过X行数据,有些文件中第一行是列名,需要跳过第一行,则使用SKIP 1。
FIELDS关键字后定义如何识别字段,常用的如下:
FIELDS:TERMINATEDBY'X'——字段分割符。
ENCLOSEDBY'X'——字段引用符,包含在此符号内的数据都当成一个字段。例如一行数据格式如:"ABC","A""B,""C,"。使用参数TERMINATEDBY','ENCLOSEDBY'"'后,系统会读到两个字段,第一个字段的值是ABC,第二个字段值是A"B,"C,。
LRTRIM ——删除首尾空白字符。
MISSING FIELDVALUESARENULL——某些字段空缺值都设为NULL。
对于字段长度和分割符不确定且准备用作外部表文件,可以使用ULTRAEDIT、EDITPLUS等来进行分析测试,如果文件较大,则需要考虑将文件分割成小文件并从中提取数据进行测试。
       
外部表对错误的处理
REJECT LIMIT UNLIMITED
在创建外部表时最后加入LIMIT子句,表示可以允许错误的发生个数。默认值为零。设定为UNLIMITED则错误不受限制
BADFILE和NOBADFILE子句
用于指定将捕获到的转换错误存放到哪个文件。如果指定了NOBADFILE则表示忽略转换期间的错误如果未指定该参数,则系统自动在源目录下生成与外部表同名的.BAD文件BADFILE记录本次操作的结果,下次将会被覆盖
LOGFILE和NOLOGFILE子句
同样在ACCESSPARAMETERS中加入LOGFILE'LOG_FILE.LOG'子句,则所有ORACLE的错误信息放入'LOG_FILE.LOG'中而NOLOGFILE子句则表示不记录错误信息到LOG中,如忽略该子句,系统自动在源目录下生成与外部表同名的.LOG文件

转载于:https://www.cnblogs.com/chinaxin/p/3333174.html

Oracle的外部表相关推荐

  1. 如何使用Oracle的外部表查询警告日志文件

    从Oracle9i版本开始,Oracle的外部表技术(Oracle External Tables)有了很大的增强,通过外部表访问外部数据增强了Oracle数据库和外部数据源进行数据交互能力,对于数据 ...

  2. Oracle之外部表

    Oracle之外部表 有时候,数据库海量数据的存储,是一个令人头疼的问题.别的不说,光是频繁的执行insert(1000次/秒)都是一场恶梦.但是,如果将数据保存到文家里,而不是数据库中,数据序列化的 ...

  3. oracle把中文转换为拼音,怎样将“Oracle”的外部表汉字转换为拼音

    怎样将"Oracle"的外部表汉字转换为拼音 2008-03-07 eNet&Ciweek 我在原来的应用中使用代码表加一个函数来处理汉字转拼音的转换问题,现在由于工作需要 ...

  4. 外表加载oracle,opengauss外部表插件——oracle_fdw

    oracle_fdw oracle_fdw是一款开源插件,github地址: https://github.com/laurenz/oracle_fdw .openGauss基于开源的 oracle_ ...

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

    Oracle外部表支持两种类型的驱动:一种是ORACLE_LOADER,外部表的数据必须来源于文件文件,另一种则是ORACLE_DATAPUMP,外部表的 同事最近在忙数据一致性比对工作,需要对不同文 ...

  6. [原]Oracle外部表结合游标完成统计一例

    近日在邮件系统进行迁移的过程中遇到一个问题,我用Oracle的外部表结合游标将其解决,特记于此文. 问题是这样的,通过开发商的程序,得到一个操作文件 delete_file ,该文件记录了一些操作不步 ...

  7. datapumpdir oracle_oracle_datapump创建外部表案例

    一.datapump创建外部表,数据来源于内部实体表 --首先创建 scott.countries实体表,用于做实验 SQLgt; create table scott.cou 一.datapump创 ...

  8. oracle外部表使用详解,详解Oracle外部表的一次维护(图文)

    在做Oracle数据库的导出导入操作的时候,发现在将导出数据导入到新库过程中报告如下错误: 在查看数据库中关于外部表的视图中相关信息:select * from dba_directoriesSele ...

  9. oracle 外部表及解决ora-29400,ora-29913错误

    对外部表的理解及测试,,,,如有理解不正确请大家指正 语法: create table 表名( 列名1,列名2,...... ) organization external  ###说明创建外部表 ( ...

最新文章

  1. java bigdecimal乘法_Java BigDecimal类型的 加减乘除运算
  2. Mozilla工程师观点:开源不赚钱,因为它不是为赚钱而设计的
  3. 气味识别应用_解决气味
  4. ios7 苹果原生二维码扫描(和微信类似)
  5. 流浪不是我的初衷 ... ...
  6. [Z]用subcaption包排版子图(表)与图(表)格式设置
  7. Resource punkt not found
  8. Launch和Shut Off操作详解 - 每天5分钟玩转 OpenStack(30)
  9. 查看linux服务器内存使用情况,不够时创建Swap、手动 cached
  10. Android 官方命令深入分析之android
  11. 采用ArcGIS 10.6制作漂亮的点阵世界地图,完美!!!
  12. 软件开发系统类别记录
  13. 软考-系统分析师知识大纲及分数
  14. python程序设计基础董付国 pdf-Python程序设计基础与应用(高等教育规划教材)
  15. Android武林大会(转)
  16. 【Centos7进入root权限是报错:sudo: /etc/sudo.conf is owned by uid 1000, should be 0】
  17. 如何在虚拟机上安装苹果系统(Mac OS)
  18. 深度学习CNN模型预测电影评论中的情感问题
  19. matlab对ADC动态性能进行分析
  20. 灰度图像特征提取之统计方式详解

热门文章

  1. 进行直播间搭建时需要注意的小细节
  2. Skynet通讯遇到的奇怪问题
  3. ansible yml语法
  4. Android首次启动时间长优化之预编译提取Odex
  5. Exchange日常管理之二十一:管理邮件归档
  6. 往自身页面提交和别处页面提交到本页的设计小技巧
  7. 谈一谈:抽象工厂+反射+配置文件 实现数据访问程序
  8. Windows8 Metro开发 (04) : 保存/读取本地应用程序设置
  9. Android中ViewPager+Fragment的基本使用
  10. Android ViewPager和Fragment实现顶部导航界面滑动效果