




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SQL*Loader使用说明 Oracle之sqlldr使用 文档变更历史日期版本作者修改内容评审号变更控制号发布日期2008-10V1肖清源新建立文档2010-1V2肖清源LOD装载修改完善目录1.sqlldr简介32.sqlldr结构42.1.sqlldr结构图42.2.sqlldr功能描述52.3.命令结构62.3.1.程序参数62.4.控制文件82.4.1.控制文件语法82.4.2.控制文件结构说明92.5.数据文件112.5.1.数据文件要求112.5.2.数据文件内容112.6.日志文件122.7.BAD文件122.8.DISCARD文件123.sqlldr 装载133.1.一般装载143.1.1.控制文件143.1.2.数据文件143.1.3.装载结果143.2.指定字段长度装载153.2.1.控制文件153.2.2.数据文件153.2.3.装载结果153.3.指定类型装载163.3.1.控制文件163.3.2.数据文件163.3.3.装载结果173.4.跳过装载173.5.多表装载173.5.1.控制文件173.5.2.数据文件183.5.3.装载结果183.6.直接路径装载193.6.1.控制文件193.6.2.数据文件203.6.3.装载结果203.7.使用函数装载203.7.1.控制文件203.7.2.装载结果213.8.多文件多表装载213.8.1.控制文件223.8.2.数据文件223.8.3.装载结果233.9.默认值装载233.9.1.控制文件233.9.2.数据文件243.9.3.装载结果243.10.LOB数据装载243.10.1.控制文件253.10.2.数据文件253.10.3.装载结果263.11.外部表装载263.11.1.装载结果271. sqlldr简介当我们在使用Oracle数据库的时候,经常需要对数据进行装载入库,而这些数据很多时候不一定是来自Oracle数据库本身,可能只是一些文本数据。Oracle在对数据入库提供了比较多工具,如常见的有:imp:只适合使用Oracle的exp工具导出来的文件,impdp:只适合由Oracle的expdp工具导出来的文件外部表:适合文本数据的装载,不过装载的数据必须在数据库服务器的本地机器上,不能实现远程的装载(当然如果采用数据同步的流也可以实现远程装载,不过不现实)。sqlldr(SQL*LOADER):适合文本数据的装载,使用相对比较简单,而且相对比较灵活,因此在对文本装载的时候多数采用这种装载方法。本文就主要介绍SQL*LOADER的文本装载方式。在不同的数据库中,基本上每个数据库都支持文本数据的装载,因此通过熟悉sqlldr的数据的装载可以实现不同数据库的数据与Oracle数据库之间进行数据交换。注:本文所有测试均在AIX系统上测试,在讲述装载时也主要基于linux/Unix系统, SQL*Loader版本: Release 10.2.0.2.02. sqlldr结构sqlldr主要由sqlldr本身命令参数,装载控制文件,装载bad文件,装载log文件,装载数据文件,discard文件,这几部分组成。通过sqlldr的装载可以实现对数据做如下几部分的操作:1,INSERT, 在表原有的基础上实现插入2,REPLACE 如果表存在数据中需要的记录,则进行替换3,TRUNCATE 删除原有的表,进行新数据的插入2.1. sqlldr结构图Sqlldr基本组成图Sqlldr直接路径与普通装载区别图2.2. sqlldr功能描述1. 可以通过网络客户端连接到服务器,实现远程数据装载。2. 可以在同一个session装载数据入多个表3. 可以在同一个session装载多个数据文件4. 可以指定数据字符集,从而实现不同编码的转化5. 可以实现对数据选择性的转载6. 可以通过sql函数来操作数据,实现数据操作性的装载7. 可以实现唯一序列转载通过制定列8. 装载数据可以从磁盘,磁带或者命名管道来获取9. 完整的错误报告描述,可以方便找到出错原因10. 可以装载复杂的对象关系数据如XML格式数据11. 提供多种装载方式,insert,apend,direct2.3. 命令结构Sqlldr命令使用比较简单,主要就是程序加参数,就可以实现数据的装载。Sqlldr通过返回值来判断是否装载成功。在UNIX/LINUX系统下,sqlldr返回值如下:返回值宏返回值EX_SUCC 0EX_FAIL1EX_WARN2EX_FTL 3在Windows NT系统下,sqlldr返回值如下:返回值宏返回值EX_SUCC 0EX_WARN2EX_FAIL3EX_FTL 4各宏值对应的说明:值宏说明EX_SUCC 数据在制定控制范围内成功装载EX_WARN数据装载存在警告,可能是reject记录数到达等原因,通常出现警告需要查对应的装载日志文件,找出警告原因,查看是否需要重新装载数据EX_FAIL语法错误,导致sqlldr无法装载EX_FTL 在装载过程中遭遇到致命错误,可以通过log可以确定发生此种错误的原因2.3.1. 程序参数Sqlldr命令参数组要有以下:userid 装载使用到的帐号信息,包括数据库信息,格式如:userid=user/passwddbnamecontrol 指定装载使用到的控制文件 log - 指定装载使用到的日志文件bad -指定装载使用到的BAD文件 data -指定装载使用到的数据文件,如果在控制文件中也制定infile文件,那么将优先使用命令行的data文件,control文件中的第一个infile文件将忽略,如果control文件中只有一个data文件那么sqlldr将给出一个警告。discard discard 文件,不符合转载条件的记录文件 discardmax 允许discards 数目,默认是全部skip 跳过记录数load 指定装载数据的逻辑数目,默认是说有记录。 注:逻辑记录和物理记录的区别:逻辑记录是指导入数据库的记录,物理记录数指文 件中存在的记录。一般情况下逻辑记录跟物理记录相等,但是有些情况下,如,多条 物理记录联合装载,这样可能出现不相等的情况。errors 允许出错数目,如果达到出错数就退出装载,默认50rows 装载提交数目,普通装载默认64,在直接路径如果没有指定默认为全部记录,通过 这个特性可以用来控制sqlldr的事务一致性。bindsize 指定普通转载绑定数组的值,默认256000,该值之适用于普通装载,而不适用于 直接路径装载,因为直接路径装载使用的是直接路径API,而不是普通装载的 insert。设置大的bindsize可以提供每次insert的记录数目。silent 提示在装载时候终端上显示的内容,有以下几种可以选择。 Header:禁止sqlldr装载标题提示信息,但在log文件依然出现。 Feedback:禁止commit point reached提示信息。 Errors:禁止数据错误信息写在log日志文件,但是rejected records依然会写入。 Discards:禁止在log日志里面的记录信息写入discard文件。 Partitions:在采用直接路径装载的时候,取消写每个分区统计信息入日志文件。 ALL:包含以上所有的值direct 使用直接路径装载parfile 参数文件指定。parallel 并行装载 ,默认为FALSE,只能用于direct装载方式。file 指定装载过程中使用的数据库中的数据文件,该选项只适用于并行装载,通过该选项 可以提高磁盘的读写速度。不同的装载可以存放不同的数据库文件。 skip_unusable_indexes 该值跟数据库配置文件中的skip_unusable_indexes类似,在装载过程中遇到无效索引的时候,不停下来继续进行装载。skip_index_maintenance 停止索引的维护,在直接路径转载的时候。使用该选项将插入一个 没用的索引键值代替把索引制成无效。这样不会因为前面的转载使 索引无效而影响后面的装载。默认为FALSE。commit_discontinued 提交已经装载的行数,如果装载失败的时候。默认为FALSE。readsize 该参数用于设置读取数据的大小,如果读控制文件中的值就使用64K大小不变的 值,readsize默认值为1048576,最大可设置的值为20M,在普通装载的情况下, bindsize的大小受限制与readsise的设置,如果readsize的值小于bindsize的值, sqlldr将会自动让readsize等于bindsize的值。external_table 使用sqlldr来使用外部表的功能; 本选项提供三个可选项: NOT_USED:默认为不使用外部表装载功能 GENERATE_ONLY:通过该选项可以生成需要通过外部表装载的所有步骤 EXECUTE:直接使用外部表功能装载 具体说明参见外部表装载columnarrayrows 该选项适用于direct路径装载,默认为5000。该选项sqlldr将不做技术,如果使用该选项则需要用户设置正确,或者接受默认的值。streamsize 该选项为直接路径装载所用,需要跟columnarrayrows配对使用。multithreading - 在多cpu的系统中默认为TRUE,在单cpu的系统中默认为FALSE。使用多 线程装载在direct path的情况下。推荐使用FALSE,因为在对于大数 据量的转载中,可能出现中途挂起的情况。 resumable -设定可恢复的空间分配,默认为FALSE。通过该选项可以用于转载过程中空间不足 引起的错误。resumable_name 该值定义空间使用的语句。默认User USERNAME (USERID), Session SESSIONID, Instance INSTANCEIDresumable_timeout 空间处理时间,默认7200秒。如果在这个时间内没有处理好空间,那 么sqlldr将因为空间不足,而错误退出。该选项需要首先设resumable 为TRUE。date_cache 用于数据转化的临时空间 默认是1000。本选项只能用于direct路径装载。在需 要数据转化,如date,timestamp类新装载上可以使用,当然如果转换的数据唯 一性很高,可能就很难有作用,对于很多重复的需要转换的比较有用,可以大 大提高转化的时间。sqlldr的命令行参数可以直接放在命令行,也可以放在控制文件,也可以直接放在参数文件PARFILE (parameter file)里面。注意:在重复指定的参数里面,命令行的参数凌驾于任何写在参数文件和控制参数文件之上的参数。2.4. 控制文件控制文件是用一种规定语言写的文本文件,这个文本文件能被sqlldr读取。sqlldr根据控制文件可以找到需要加载的控制参数及其数据。并且根据控制参数分析和解释这些数据,从而实现数据的装载。控制文件由三个部分组成:1,全局选项,即可以用于命令行输入的sqlldr选项,rows,skip 等;2,INFILE子句指定的输入数据;3,数据特性说明。以下将详细讨论控制文件的结构。2.4.1. 控制文件语法控制文件编写的语法格式如下:OPTIONS ( SKIP=integer LOAD = integer ERRORS = integer ROWS=integerBINDSIZE=integer SILENT=(ALL|FEEDBACK|ERROR|DISCARD) )LOADDATA INFILE | INDDN file | * STREAM | RECORD | FIXED length BLOCKSIZE size|VARIABLE length BADFILE | BADDN file DISCARDS | DISCARDMAX integr INDDN | INFILE . . . APPEND | REPLACE | INSERT RECLENT integer CONCATENATE integer | CONTINUEIF THIS | NEXT (start: end)LAST Operator string | X hex INTO TABLE user.tableAPPEND | REPLACE|INSERTWHEN condition AND condition.FIELDS delimiter ( column RECNUM | CONSTANT value |SEQUENCE ( integer | MAX |COUNT , increment ) |POSITION ( start end | * + integer ) datatype TERMINATED BY WHITESPACE| X character OPTIONALLY ENCLOSE BY XcharcterNULLIF condition DEFAULTIF condotion ,.)INTO TABLE.BEGINDATA2.4.2. 控制文件结构说明一,要加载的数据文件:1INFILE 和INDDN是同义词,它们后面都是要加载的数据文件。如果用 * 则表示数据 就在控制文件内。在INFILE 后可以跟几个文件,详细可以参考多文件装载的例子。2STRAM 表示一次读一个字节的数据。3RECORD 使用宿主操作系统文件及记录管理系统。3FIXED length 要读的记录长度为length字节,4VARIABLE 被读的记录中前两个字节包含的长度,length 记录可能的长度。默认为8k字节。5BADFILE和BADDN同义。Oracle 不能加载数据到数据库的那些记录。6DISCARDFILE和DISCARDDN是同义词。记录没有通过的数据。7DISCARDS和DISCARDMAX是同义词。Integer 为最大放弃的文件个数。二,加载方法1APPEND 给表添加行。2INSERT 给空表增加行(如果表中有记录则退出)。3REPLACE(truncate) 先清空表在加载数据。4RECLEN 用于两种情况: 1)SQLLDR不能自动计算记录长度, 2)用户想看坏文件的完整记录时。 对于后一种,Oracle只能按常规把坏记录部分写到错误的地方。如果看整条记录,则可以将整条记录写到坏文件中。三,指定最大的记录长度 CONCATENATE允许用户设定一个整数,表示要组合逻辑记录的数目四,建立逻辑记录:1THIS 检查当前记录条件,如果为真则连接下一个记录。2NEXT 检查下一个记录条件。如果为真,则连接下一个记录到当前记录来。3Start: end 表示要检查在THIS或NEXT字串是否存在继续串的列,以确定是否进行连接。如:continueif next(1-3)=WAG 或continueif next(1-3)=X0d03if五,指定要加载的表:1 INTOTABLE要加的表名。2 WHEN和selectWHERE类似。用来检查记录的情况,如:when(3-5)=SSMand(22)=*六,介绍并括起记录中的字段FIELDS 给出记录中字段的分隔符,FIELDS格式为:FIELDS TERMIALED BY WHITESPACE | X charcter OPTIONALLY ENCLOSE BY Xcharcter TERMINATED 读完前一个字段即开始读下一个字段直到结束。WHITESPACE 是指结束符是空格的意思。包括空格、Tab、换行符、换页符及回车符。如果是要判断单字符,可以用单引号括起,如X1B等。OPTIONALLY ENCLOSED 表示数据应由特殊字符括起来。也可以括在TERMINATED字符内。使用OPTIONALLY要同时用TERMINLATED。ENCLOSED 指两个分界符内的数据。如果同时用 ENCLOSED和TERMINAED ,则它们的顺序决定计算的顺序。七,定义列:column 是表列名。列的取值可以是:BECHUM 表示逻辑记录数。第一个记录为1,第2个记录为2。CONSTANT 表示赋予常数。SEQUENCE 表示序列可以从任意序号开始,格式为:SEQUENCE ( integer | MAX |COUNT ,incrementPOSITION 给出列在逻辑记录中的位置。可以是绝对的,或相对前一列的值。格式为:POSITION ( startend | * +integer )Start 开始位置* 表示前字段之后立刻开始。+ 从前列开始向后条的位置数。八,定义数据类型:1字符类型数据CHAR (length) delimiterlength缺省为 1.2.日期类型数据DATE ( length)date_format delimiter使用to_date函数来限制。3字符格式中的十进制DECIMAL EXTERNAL (length) delimiter用于常规格式的十进制数(不是二进制= 一个位等于一个bit)。4压缩十进制格式数据DECIMAL (digtial ,precision)5双精度符点二进制DOUBLE6普通符点二进制FLOAT7字符格式符点数FLOAT EXTERNAL (length) delimiter8双字节字符串数据GRAPHIC (legth)9双字节字符串数据GRAPHIC EXTERNAL (legth)10常规全字二进制整数INTEGER11字符格式整数INTEGER EXTERNAL12常规全字二进制数据SMALLINT13可变长度字符串VARCHAR14可变双字节字符串数据VARGRAPHIC2.5. 数据文件2.5.1. 数据文件要求 数据类型的指定 CHAR 字符型 INTEGER EXTERNAL 整型 DECIMAL EXTERNAL 浮点型2.5.2. 数据文件内容可以在OS下的一个文件;或跟在控制文件下的具体数据。数据文件可以是:1、 二进制与字符格式:LOADER可以把二进制文件读(当成字符读)列表中2、 固定格式:记录中的数据、数据类型、 数据长度固定。3、 可变格式:每个记录至少有一个可变长数据字段,一个记录可以是一个连续的字符串。数据段的分界(如姓名、年龄)如用“,”作字段的 分 ;用,作数据括号等4、 LOADER可以使用多个连续字段的物理记录组成一个逻辑记录。2.6. 日志文件当SQL*Loader开始执行后,它就自动建立日志文件。日志文件包含有加载的总结,加载中的错误信息等。通过silent的参数可以控制日志文件的显示的详细程度。如果需要通过程序来读取日志文件来判断转载是否符合要求需要注意以下两点:1, 单条记录的时候,日志文件输出的时候会跟多条记录装载有所不同。2, 在出现异常情况的时候,日志文件可能会没有写完全。2.7. BAD文件坏文件包含那些被SQL*Loader拒绝的记录。被拒绝的记录可能是不符合要求的记录。坏文件的名字由SQL*Loader命令的BADFILE参数来给定。如果装载的时候没有指定BAD文件,sqlldr将自动建立.bad文件。通过.bad文件可以检查分析数据不符合装载要求的原因。2.8. DISCARD文件该文件为可选文件,主要存放不符合装载规则的废弃记录,在多数情况下可以使用bad文件来代替该文件。如果没有指定discard参数或者discardmax参数,sqlldr将不会自动建立.dsc文件。3. sqlldr 装载以下部分主要针对各种装载进行实际的测试。各种表的结构如下:CREATE TABLE dept (deptno VARCHAR2(2),dname VARCHAR2(20),loc VARCHAR2(20);CREATE TABLE emp (empno NUMBER(4),ename VARCHAR2(10),job VARCHAR2(10),mgr NUMBER(4),hiredate DATE,sal NUMBER(8,2),comm NUMBER(7,2),deptno NUMBER(2),projno NUMBER(4),loadseq NUMBER(3); CREATE TABLE proj (emp NUMBER(4),projno NUMBER(3); CREATE TABLE funcdemo (last_name VARCHAR2(20),first_name VARCHAR2(20);CREATE TABLE decodemo (fld1 VARCHAR2(20),fld2 VARCHAR2(20);CREATE TABLE denver_prj (projno VARCHAR2(3),empno NUMBER(5),projhrs NUMBER(2);CREATE TABLE orlando_prj (projno VARCHAR2(3),empno NUMBER(5),projhrs NUMBER(2);CREATE TABLE misc_prj (projno VARCHAR2(3),empno NUMBER(5),projhrs NUMBER(2);CREATE TABLE po_tab OF XMLTYPE;注:以下所有例子都是文件与数据文件分开,如果要使用控制文件与数据文件一起,只需要在INFILE 后面加*即可。然后在BEGINDATA后面加入需要装载的数据。3.1. 一般装载此种装载方法是最常用到的装载方法,也是比较简单的装载。3.1.1. 控制文件LOAD DATA INFILE /app/etl/_xqy/sqlldr/sql.datINTO TABLE deptFIELDS TERMINATEd BY & TRAILING NULLCOLS(deptno, dname, loc)3.1.2. 数据文件120&RESEARCH&SARATOGA10&ACCOUNTING&CLOVELAND11&ART&SALEMAA&FINANCE&BOSTON21&SALES&ROCHESTER42&INTL&SAN FRANCISCO3.1.3. 装载结果通过查看可以看见数据装载结果如下:由上面可以看出,有一条记录没有装载进来,因为附近不符合规则,长度超出了表的定义长度。3.2. 指定字段长度装载3.2.1. 控制文件LOAD DATA INFILE /app/etl/_xqy/sqlldr/sql.datINTO TABLE empFIELDS TERMINATEd BY & OPTIONALLY ENCLOSED BY TRAILING NULLCOLS(empno POSITION(01:04) INTEGER EXTERNAL, ename POSITION(06:15) CHAR, job POSITION(17:25) CHAR, mgr POSITION(27:30) INTEGER EXTERNAL, sal POSITION(32:39) DECIMAL EXTERNAL, comm POSITION(41:48) DECIMAL EXTERNAL, deptno POSITION(50:51) INTEGER EXTERNAL)3.2.2. 数据文件7781 CLARK MANAGER 7838 2572.50 107839XKING PRESIDENT 5500.00 107934 MILLER CLERK 7782 920.00 107566 JONES MANAGER 7839 3123.75 207499 ALLEN SALESMAN 7698 1600.00 300.01 307654 MARTIN SALESMAN 7698 1312.50 1400.00 307658 CHAN ANALYST 7566 3450.00 203.2.3. 装载结果注:该装载使用POSITION关键字来定义字段的范围。从结果可以看出7839XKING中的X没有装载进来。如果采用该方法装载,需要明确知道数据的长度,不然容易出现储物。3.3. 指定类型装载3.3.1. 控制文件LOAD DATA INFILE /app/etl/_xqy/sqlldr/sql.datAPPEND INTO TABLE empFIELDS TERMINATEd BY , OPTIONALLY ENCLOSED BY TRAILING NULLCOLS(empno,ename,job,mgr,hiredate DATE DD-Month-YYYY,sal,comm,deptno CHAR TERMINATED BY :,projno,loadseq SEQUENCE(MAX,1)3.3.2. 数据文件9782,Clark,Manager,7839, 09-June-2000, 2572.50, 10:1019839,King,President, , 17-November-1999, 5500.00,10:1029934,Miller,Clerk,7782, 23-January-2001, 920.00, 10:1029566,Jones,Manager,7839, 02-April-2001, 3123.75, 20:1019499,Allen,Salesman,7698, 20-February-2001, 1600.00, 300.00, 30:1039654,Martin,Salesman,7698, 28-September-2000, 1312.50, 1400.00, 30:1039658, Chan, Analyst, 7566, 03-May-1999, 3450, 20:1013.3.3. 装载结果注:该装载使用了日期类型的装载,还是用了序列SEQUENCE装载的形式。在deptno字段使用了TERMINATED BY :的方式来截断后面的字符。3.4. 多表装载3.4.1. 控制文件LOAD DATAINFILE /app/etl/_xqy/sqlldr/sql.datBADFILE /app/etl/_xqy/sqlldr/sql.badDISCARDFILE /app/etl/_xqy/sqlldr/sql.dscREPLACEINTO TABLE emp (empno POSITION(1:4) INTEGER EXTERNAL,ename POSITION(6:15) CHAR,deptno POSITION(17:18) CHAR,mgr POSITION(20:23) INTEGER EXTERNAL)INTO TABLE projWHEN projno != (emp POSITION(1:4) INTEGER EXTERNAL,projno POSITION(25:27) INTEGER EXTERNAL)INTO TABLE projWHEN projno != (emp POSITION(1:4) INTEGER EXTERNAL,projno POSITION(29:31) INTEGER EXTERNAL)INTO TABLE projWHEN projno != (emp POSITION(1:4) INTEGER EXTERNAL,projno POSITION(33:35) INTEGER EXTERNAL)3.4.2. 数据文件1234 BAKER 10 9999 101 102 1031234 JOKER 10 9999 777 888 9992664 YOUNG 20 2893 425 abc 1025321 OTOOLE 10 9999 321 55 402134 FARMER 20 4555 2A6 4562414 LITTLE 20 5634 236 456 406542 LEE 10 4532 102 321 142849 EDDS xx 4555 294 404532 PERKINS 10 9999 401244 HUNT 11 3452 665 133 456123 DOOLITTLE 12 9940 1321453 MACDONALD 25 5532 2003.4.3. 装载结果表一图表二图注:该表通过3.5. 直接路径装载sqlldr userid=etl/etl control=sql.ctl log=sql.log direct=true3.5.1. 控制文件LOAD DATAINFILE /app/etl/_xqy/sqlldr/sql.datINSERTINTO TABLE emp- SORTED INDEXES (emp_empno) (empno POSITION(01:04) INTEGER EXTERNAL NULLIF empno=BLANKS,ename POSITION(06:15) CHAR,job POSITION(17:25) CHAR,mgr POSITION(27:30) INTEGER EXTERNAL NULLIF mgr=BLANKS,sal POSITION(32:39) DECIMAL EXTERNAL NULLIF sal=BLANKS,comm POSITION(41:48) DECIMAL EXTERNAL NULLIF comm=BLANKS,deptno POSITION(50:51) INTEGER EXTERNAL NULLIF deptno=BLANKS)3.5.2. 数据文件7781 CLARK MANAGER 7838 2572.50 107839 KING PRESIDENT 5500.00 107934 MILLER CLERK 7782 920.00 107566 JONES MANAGER 7839 3123.75 207499 ALLEN SALESMAN 7698 1600.00 300.00 307654 MARTIN SALESMAN 7698 1312.50 1400.00 307658 CHAN ANALYST 7566 3450.00 203.5.3. 装载结果3.6. 使用函数装载3.6.1. 控制文件控制文件一:LOAD DATAINFILE *INSERTINTO TABLE funcdemo( LAST_NAME position(1:7) CHAR UPPER(:LAST_NAME), FIRST_NAME position(8:15) CHAR LOWER(:FIRST_NAME)BEGINDATALocke PhilCline Jack控制文件二:LOAD DATAINFILE *INSERTINTO TABLE decodemoFIELDS TERMINATED BY ,OPTIONALLY ENCLOSED BY ( fld1, fld2 DECODE(:fld1, hello, goodbye, :fld1)BEGINDATAhello,goodbye,this is a test,hello,3.6.2. 装载结果3.7. 多文件多表装载上面的例子中实现了多表的装载,除了一个文件可能需要导入到多个表里面以后,还有就是有些时候可能需要把几个文件一次转载到一个表,或者多个表里面。如果每次都要写控制文件一个个文件来装载的话,大大减低了效率。因此sqlldr提供了一次装载多个文件的功能。3.7.1. 控制文件LOAD DATAINFILE /app/etl/_xqy/sqlldr/sqla.dat badfile /app/etl/_xqy/sqlldr/sqla.badINFILE /app/etl/_xqy/sqlldr/sqlb.dat badfile /app/etl/_xqy/sqlldr/sqlb.badAPPENDINTO TABLE denver_prjWHEN projno = 101 (projno position(1:3) CHAR, empno position(4:8) INTEGER EXTERNAL, projhrs position(9:10) INTEGER EXTERNAL)INTO TABLE orlando_prjWHEN projno = 202 (projno position(1:3) CHAR, empno position(4:8) INTEGER EXTERNAL, projhrs position(9:10) INTEGER EXTERNAL)INTO TABLE misc_prjWHEN projno != 101 AND projno != 202 (projno position(1:3) CHAR, empno position(4:8) INTEGER EXTERNAL, projhrs position(9:10) INTEGER EXTERNAL)3.7.2. 数据文件Sqla.dat:1011234515101543214010123456203032345610Sqlb.dat:2021234515202234561040412345103.7.3. 装载结果3.8. 默认值装载在使用装载的过程中,可能需要一些列是自定义一个值,也就是默认的一个值,这个值是没有出现在数据文件里面的。在sqlldr的装载中,提过了这个功能,用户可以自定义来装载需要的默认值。CONSTANT,为sqlldr关键字,告诉sqlldr该列为自定义值列。3.8.1. 控制文件OPTIONS (ERRORS=100, SILENT=(FEEDBACK)LOAD DATAINFILE /app/etl/_xqy/sqlldr/sql.datREPLACEINTO TABLE deptFIELDS TERMINATED BY ,OPTIONALLY ENCLOSED BY (deptno CONSTANT XX,dname, loc)注:本控制文件头加入了OPTIONS (ERRORS=100, SILENT=(FEEDBACK)选项,这样不需要在命令行中输入,如果了上面的选项,还有很多选项可以放在上面,具体有哪些选项以及对应的意思,可以参考前面的sqlldr参数说明部分。3.8.2. 数据文件RESEARCH,SARATOGAACCOUNTING,CLOVELANDART,SALEMFINANCE,BOSTONSALES,ROCHESTERINTL,SAN FRANCISCO3.8.3. 装载结果注:从结果可以看出deptno列,已经采用了自定义的列。另外除了CONSTANT关键字以外还可以采用RECNUM(每行的行号,只是本文件中的行号),SYSDATE 来自定义列。控制文件写法为:列名 RECNUM 形式。3.9. LOB数据装载在oracle中对于大数据的操作(LOB ,XMLTYPE)的操作会比较麻烦。但是通过sqlldr还是可以装载不同类型的大数据。以下就针对BLOB的类型来测试,如果是其他类型,基本可以使用相同的办法来处理。在XMLTYPE中,其实就是CLOB的类型,一样可以采用LOB装载的方法。另外LOB类型分成两种,一种为所有记录只有一个文件,即非lob类型与lob类型只有一个文件。另一种为需要装载的文件有多个,如用户注册资料,用户对应相片为LOB类型,而记录中只记录用户图片的路径,具体图片在另外一个文件之中。例如文件user.dat文件如下:Xqy&21&pic1.jpegtest&22&pic2.jpeg其中第一个为用户名称,第二个为年龄,第三个图片为图片名称。但在数据装载入库的时候,不是转载图片路径,而是建立lob类型,把整个图片装入内存之中。如果是第一种情况,即只有一个文件需要装载,那么跟普通的装载一样,在LOB字段后面使用CHAR(xx),即可装载成功。一下说明的主要是针对第二种情况的装载。3.9.1. 控制文件Load DATAINFILE *INTO TABLE dem
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025中冶京诚(湘潭)重工设备有限公司招聘考试参考题库及答案解析
- 2025甘肃省总工会直属事业单位招聘4人考试参考题库及答案解析
- 亚太卫星宽带通信(深圳)有限公司校园招聘职位表考试参考题库及答案解析
- 2025年湖南永州宁远县教育系统引进第三批急需紧缺专业人才2人考试参考题库及答案解析
- 基金从业资格考试包过及答案解析
- 安全题库煤炭开采企业及答案解析
- 新型抗凝剂对新生儿血小板减少症炎症反应的影响-洞察及研究
- 药物个体化差异-洞察及研究
- 仿生食品结构设计-洞察及研究
- 微创疗法效果评估-第1篇-洞察及研究
- 宠物经济下的宠物食品包装创新研究报告:2025年市场潜力分析
- 2025年关于广告设计合同格式范本
- 临床基于MDT平台下的“5A”护理模式在改善脑卒中后顽固性呃逆患者中应用
- 蜂蛰伤的治疗指南讲课件
- 坏死性筋膜炎49390课件
- JT∕T 651-2022 牵引杆挂车转盘
- 某公司项目启动会(38张)课件
- 全国水土保持规划国家级水土流失重点预防区和重点治理区复核划分
- DB13(J)∕T 269-2018 电动汽车充电站及充电桩建设技术标准
- 机动车交通事故快速处理协议书
- 临床营养支持小组工作方案
评论
0/150
提交评论