Oraclesqlldr命令
今天别⼈的⼊库代码,看的真有点晕,最后看完才知道是⽤了sqlldr命令。哎。。。还是学艺不精啊,今后还是要多努⼒。
总结哈sqlldr命令:虽然⼤多是⽹上来的,⾃⼰要有体会嘛!开源就是好啊。
sqlldr是cmd下的命令,⽤来将⽂本格式数据导⼊到数据库中。
命令格式:
sqlldr username/password@sid control=*.ctl
*.ctl格式为:
load data
infile "d://"    外部数据⽂件
infile "d://"  可指定多个数据⽂件
append into table test  向表中追加数据
fields terminated by ","    外部⽂件的数据以“,”分隔
OPTIONALLY ENCLOSED BY '"'  部分字段可以⽤双引号包起来
trailing nullcols        表中的字段没有对应的值时填充空值
(
id integer external,    integer external 表⽰插⼊的数据是string,如果只保留integer,表⽰插⼊的数据是⼆进制
name "upper(:name)",    将插⼊的值转换为⼤写
con ":id||:name",        表中CON列的值是ID和NAME的组合值
dt date"yyyy-mm-dd"      插⼊⽇期型数据
)
说明:
load data
告诉SQLLDR要做什么(在这个例⼦中,则指⽰要加载数据)。SQLLDR还可以执⾏CONTINUE_LOAD,也就是继续加载。只有在继续⼀个多表直接路径加载时才能使⽤后⾯这个选项
INFILE * :如果是*号,这会告诉SQLLDR所要加载的数据实际上包含在控制⽂件本⾝上,例见下⼀⽂。如上例指定包含数据的另⼀个⽂件的⽂件名。如果愿意,可以使⽤⼀个命令⾏参数覆盖这个INFILE语句。要当⼼,命令⾏选项总会涵盖控制⽂件设置
在append的位置还可以⽤以下列表中的⼀个值:
insert  向表中插⼊值,但要求表开始时为空,默认的加载选项
replace delete表中的数据,然后插⼊新值,记录多时速度慢
append  向表中追加数据
truncate trunctate表,然后插⼊新值,不能回退
FIELDS TERMINATED BY ‘,’:告诉SQLLDR数据的形式应该是⽤逗号分隔的值。为SQLLDR描述输⼊数据的⽅式有数⼗种;这只是其中较为常⽤的⽅法之⼀。
TERMINATED BY WHITESPACE会解析这个串,查空⽩符(制表符、空格和换⾏符)的第⼀次出现,然后继续查,直⾄到下⼀个⾮空⽩符。
(id integer external,
.....
dt date"yyyy-mm-dd"):告诉SQLLDR所要加载的列、这些列在输⼊数据中的顺序以及数据类型。这是指输⼊流中数据的数据类型,⽽不是数据库中的数据类型。列的数据类型默认为CHAR(255)
加载这样的定界数据时,很可能想逃过输⼊记录中的某些列。例如,你可能加载字段1、3和5,⽽跳过第2列和第4列。为此,SQLLDR提供了FILLER关键字。这允许你映射⼀个输⼊记录中的⼀列,但不把它放在数据库中。
例:
C:\>sqlldr scott/tiger control=d:/l log=d:/sqlldr.log
load date
infile "d://"
append into table tt
fields terminated by ","
trailing nullcols
(
id integer external,
name "upper(:name)",
con ":id||:name",
dt date"yyyy-mm-dd"
)
<的数据如下
1,a,,2007-07-8
2,b,,2008-07-8
3,c,,2009-07-8
附录:有效的关键字:⽅便今后使⽤和查询。
userid -- ORACLE ⽤户名/⼝令
control -- 控制⽂件名
log -- ⽇志⽂件名
bad -- 错误⽂件名
data -- 数据⽂件名
discard -- 废弃⽂件名
discardmax -- 允许废弃的⽂件的数⽬        (全部默认)
skip -- 要跳过的逻辑记录的数⽬  (默认 0)
load -- 要加载的逻辑记录的数⽬  (全部默认)
errors -- 允许的错误的数⽬        (默认 50)
rows -- 常规路径绑定数组中或直接路径保存数据间的⾏数
truncate多张表加逗号吗(默认: 常规路径 64, 所有直接路径)
bindsize -- 常规路径绑定数组的⼤⼩ (以字节计)  (默认 256000)
silent -- 运⾏过程中隐藏消息 (标题,反馈,错误,废弃,分区)
direct -- 使⽤直接路径                    (默认 FALSE)
parfile -- 参数⽂件: 包含参数说明的⽂件的名称
parallel -- 执⾏并⾏加载                    (默认 FALSE)
file -- 要从以下对象中分配区的⽂件
skip_unusable_indexes -- 不允许/允许使⽤⽆⽤的索引或索引分区  (默认 FALSE)
skip_index_maintenance -- 没有维护索引, 将受到影响的索引标记为⽆⽤  (默认 FALSE)
commit_discontinued -- 提交加载中断时已加载的⾏  (默认 FALSE)
readsize -- 读取缓冲区的⼤⼩              (默认 1048576)
external_table -- 使⽤外部表进⾏加载; NOT_USED, GENERATE_ONLY, EXECUTE  (默认 NOT_USED) columnarrayrows -- 直接路径列数组的⾏数  (默认 5000)
streamsize -- 直接路径流缓冲区的⼤⼩ (以字节计)  (默认 256000)
multithreading -- 在直接路径中使⽤多线程
resumable -- 启⽤或禁⽤当前的可恢复会话  (默认 FALSE)
resumable_name -- 有助于标识可恢复语句的⽂本字符串
resumable_timeout -- RESUMABLE 的等待时间 (以秒计)  (默认 7200)
date_cache -- ⽇期转换⾼速缓存的⼤⼩ (以条⽬计)  (默认 1000)
no_index_errors -- 出现任何索引错误时中⽌加载  (默认 FALSE)
PLEASE NOTE: 命令⾏参数可以由位置或关键字指定
。前者的例⼦是 'sqlldr
scott/tiger foo'; 后⼀种情况的⼀个⽰例是 'sqlldr control=foo
userid=scott/tiger'。位置指定参数的时间必须早于
但不可迟于由关键字指定的参数。例如,
允许 'sqlldr scott/tiger control=foo logfile=log', 但是
不允许 'sqlldr scott/tiger control=foo log', 即使
参数 'log'的位置正确。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。