Oracle的外部表
一.外部表特性
数据文件位于操作系统之外,并且具有一定的格式分割的文本文件或其他类型文件.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文件
Oracle的外部表的更多相关文章
- Oracle 之 外部表
一.外部表概述 外部表只能在Oracle 9i 之后来使用.简单地说,外部表,是指不存在于数据库中的表. 通过向Oracle 提供描述外部表的元数据,我们可以把一个操作系统文件当成一个只读的数 据库表 ...
- Oracle使用外部表批量创建用户
整体思路:通过使用外部表将用户名导入Oracle的表中,然后通过PL/SQL遍历数据表,批量创建用户. 具体步骤如下: 1.在安装数据库的服务器的C盘根目录创建一个User List.txt文件,内容 ...
- Oracle 创建外部表
Oracle 外部表能迅速的将海量的数据导入到数据库里面,外部表的创建使用步骤如下: 1 创建一个Directory:必须用sys用户创建,用户存放外部数据文件. create directory D ...
- 如何利用Oracle外部表导入文本文件的数据
同事最近在忙数据一致性比对工作,需要对不同文本文件中的数据进行比对,有的文件较大,记录较多,如果用普通的文本编辑器打开的话,很显然,会很卡,甚至打不开. 基于此,可将该文本文件的数据导入到数据库中,在 ...
- Oracle数据加载之外部表的介绍
环境: 服务端:RHEL6.4 + Oracle 11.2.0.4 目录: 一. 创建外部表 1.1 创建外部表需要的目录 1.2 创建外部表 1.3 创建外部表源文件 1.4 查询外部表 二. 加载 ...
- ORACLE外部表总结
外部表介绍 ORACLE外部表用来存取数据库以外的文本文件(Text File)或ORACLE专属格式文件.因此,建立外部表时不会产生段.区.数据块等存储结构,只有与表相关的定义放在数据字典中.外部表 ...
- 使用oracle外部表进行数据泵卸载数据
数据泵卸载Oracle9i引入了外部表,作为向数据库中读取数据的一种方法.Oracle 10g则从另一个方向引入了这个特性,可以使用CREATE TABLE语句创建外部数据,从而由数据库卸载数据.从O ...
- Oracle外部表的使用
外部表可以像其它表一样,用select语句作查询.但不能做DML操作,不能建index,不接受约束.这是因为它不是以段的形式存于数据库中,只是以数据字典构造存在,指向一个或多个操作系统文件. 外部表的 ...
- Oracle外部表详解(转载)
(外部表创建主要注意创建目录访问权限问题.目录路径格式无空格等不相关字符,即必须是当前表访问用户可以访问:关于表中行数的限制问题,如果不加限制注意添加reject limit unlimited:表中 ...
随机推荐
- 【转】XenServer体系架构解析
XenServer是一套已在云计算环境中经过验证的企业级开放式服务器虚拟化解决方案,可以将静态.复杂的IT环境转变为更加动态.易于管理的虚拟数据中心,从而大大降低数据中心成本.同时,它可以提供先进的管 ...
- JS--遍历对象
var person = { Name:"Frank", Age:23 } Object.keys(person).forEach(function(key){ console.l ...
- Linux下的ctrl常用组合键
在linux的命令模式下使用ctrl组合键能让操作更便捷. ctrl + k -- 剪切光标及其后边的内容: ctrl + u -- 剪切光标之前的内容: ctrl + y -- 在光标处粘贴上两个命 ...
- h5+mui
参考链接http://blog.csdn.net/tbwood/article/details/42081861 待补充
- U3D 打包时找不到tag的问题
在公司改完一个功能,把工程拷回家打开后,编辑器模式下运行正常,打包PC平台和安卓平台时都报错,找不到chatContent这个tag,察看了下下拉列表中明明有这个tag,并且勾选上了,但是点击add ...
- js 页面刷新location.reload和location.replace的区别小结
reload 方法,该方法强迫浏览器刷新当前页面. 语法: location.reload([bForceGet]) 参数: bForceGet, 可选参数, 默认为 false,从客户端缓存里取当前 ...
- virtualBox安装Centos7之后
之前用vmware装虚拟机的时候,直接配置好网卡就可以ping通,可以用ssh登录,然后配置yum源,万事大吉. 但是virtualBox配置却有不同,需要按下面的方法配置: 选中虚拟机->设置 ...
- [LeetCode] Strobogrammatic Number 对称数
A strobogrammatic number is a number that looks the same when rotated 180 degrees (looked at upside ...
- [LeetCode] Longest Consecutive Sequence 求最长连续序列
Given an unsorted array of integers, find the length of the longest consecutive elements sequence. F ...
- maven配置和下载
下载链接:http://maven.apache.org/docs/ 以maven3.0.4为例,eclipse以kepler为例 环境变量的配置 1.系统变量-新建-变量名:MAVEN_HOME-变 ...