SqlLoader怎么使用
SQL*Loader(SQLLDR)是Oracle的高速批量数据加载工具。这是一个非常有用的工具,可用于多种平面文件格式向Oralce数据库中加载数据。今天看了申请了*loader的使用,自己小试了下,记录在这 1、假设要插入数据的表ftest,字段是(id,username,password,sj) 2、导入表的数据 以txt格式存储,名为data.txt 3、写控制文件,格式为ctl,命名为cont.ctl 内容如下:
4 在cmd命令窗口中执行 5 在plsql中查看表ftest 查看已成功插入。 重新学习sqlldr sqlldr导入数据的一个最简单例子:sqlldr导入的四种加载方式:APPEND :原先的表有数据 就加在后面 用SQLLDR加载数据的FAQ1、如何加载定界数据 1)定界数据即用某个特殊字符分隔的数据,可能用引号括起,这是当前平面文件最常见的数据格式。 它指定用逗号分隔数据字段,每个字段可以用双引号括起。如果把这个控制文件的最后部分修改如下: 2)另一种常用的格式是制表符定界数据。有两种方法使用terminated by子句来加载这种数据: terminated by X'09' --使用十六进制格式的制表符;若用ASCII,制表符应该是9 Sales --因为一旦遇到一个制表符就会输出一个值。 因此,将10赋给deptno,dname得到了null,因为在第一个制表符和第二个制表符之间没有数据 3)sqlldr的filler关键字使用 如跳过制表符 2、如何加载固定格式数据要加载定宽的固定位置数据,将会在控制文件中使用position关键字。 这个控制文件没有使用terminated by子句;而是使用了position来告诉sqlldr 字段从哪里开始,到哪里结束。 并使用如下控制文件: 使用position时,可以使用相对偏移量,也可以使用绝对偏移量。前面的例子使用了绝对偏移量,明确指定字段从哪开始,从哪结束,也可以将 *指示控制文件得出上一个字段在哪里结束。因此,在这种情况下,(*:16)与(3:16)是一样的。注意,控制文件可以混合使用相对位置和绝对位置。 position子句中的结束位置必须是数据结束的绝对列位置。有时,可能指定每个字段的长度更为容易,特别是如果这些字段是连续的。采用这种 方式,只需告诉sqlldr:记录从第一个字节开始,然后指定每个字段的长度。如下: 3、如何加载日期 使用sqlldr加载日期只需在控制文件中date数据类型,并指定要使用的日期掩码。这个日期掩码与数据库中to_char和to_date中使用的日期掩码一样。 如修改dept表如下: 4、如何使用函数加载数据如果想确保加载的数据是大写的,可以改写控制文件如下: 如下控制文件加载数据无法导入 1)TRAILING NULLCOLS的使用:一般默认用的好 解决方法,就是使用TRAILING NULLCOLS。这样,如果输入记录中不存在某一列的数据,sqlldr就会为该列绑定一个null值。 这种情况下,增加TRAILING NULLCOLS会导致绑定变量:entire_line成为null。 2)case在sqlldr中的使用 假设输入文件中有以下格式的日期: 可用如下的控制文件 9 then to_date(:last_updated,'hh24:mi:ss dd/mm/yyyy') when instr(:last_updated,':')>0 then to_date(:last_updated,'hh24:mi:ss') else to_date(:last_updated,'dd/mm/yyyy') end" ) begindata 10,12:03:03 17/10/2005 20,02:23:54 30,01:24:00 21/10/2006 40,17/8/2005 alter session set nls_date_format='dd-mon-yyyy hh24:mi:ss'; select * from dept;5、如何加载有内嵌换行符的数据1)用非换行符的其它字符来表示换行符,并在加载时使用一个sql函数用一个CHR(10)替换该文本。
2)在infile指令上使用FIX属性,加载一个定长平面文件。 注: 在unix上,行结束标记是n即CHR(10),而windows nt平台的行结束标记是rn即CHR(13)||CHR(10); 3)在infile指令在、上使用VAR属性,加载一个变宽文件,在该文件使用的格式中,每一行前几个字节指定了这一行的长度
4)在infile指令上使用STR属性,加载一个变宽文件,其中用某个字符序列来表示行结束符,而不是用换行符表示 在windows上用 6、加载lob数据1)加载内联的lob数据。这些lob数据通常内嵌有换行符和其他特殊字符 "| --控制文件 load data infile demo.dat "str x'7C0D0A'" into table dept replace fields terminated by ',' optionally enclosed by '"' trailing nullcols (deptno,comments char(1000000) --sqlldr默认输入的字段都是char(255)。char(1000000)表示允许输入多达1000000个字符 ) select * from dept;2)加载外联的lob数据。 需要把包含有一些文件名的数据文件加载在lob中,而不是让lob数据与结构化数据混在一起。这样就不必使用上述的4种方法之一来避开输入数据中 lobfile数据采用以下某种格式: 定长字段(从lobfile加载字节100到10000); 3)将lob数据加载到对象列 一般用于加载图像 加载这种数据的控制文件如下所示: 注:column object告诉sqlldr这不是一个列名,而是列名的一部分。 使用的列名是image.source.localdata 额外介绍: 使用plsql加载lob数据 host echo 'hello world!' >d:/oracle/test.txt declare l_clob clob; l_bfile bfile; begin insert into demo values (1,empty_clob()) returning theclob into l_clob; l_bfile := bfilename('DIR1','test.txt'); dbms_lob.fileopen(l_bfile); dbms_lob.loadfromfile(l_clob,l_bfile,dbms_lob.getlength(l_bfile)); dbms_lob.fileclose(l_bfile); end; select dbms_lob.getlength(theclob),theclob from demo;注: 创建的目录默认为大写DIR1,如果目录写成dir1就会提示错误,如果要想使用混有大小写的目录名,在创建这样的目录时应该带引号的标识符,如下所示: 以上内容是小编给大家分享的关于SqlLoader怎么使用的相关资料,希望大家喜欢。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |