Java使用sqlload_使用sqlload导入外部数据

被导入的表

SQL> desc emp_enc

Name  Type         Nullable Default Comments

----- ------------ -------- ------- --------

ENAME VARCHAR2(10) Y

EMPNO NUMBER(4)    Y

SAL   NUMBER(7,2)  Y

需要导入的txt文件,以逗号分隔

load.txt

aa,1,100

cc,2,222

dd,3,221

js,4,231

jdj,38,282892(这天记录长度过长,所以待会会导入失败)

sqlload 控制文件所要用到的参数

OPTIONS (skip=1,rows=128)   -- sqlldr 命令显示的选项可以写到这里边来,skip=1

用来跳过数据中的第一行

LOAD DATA

INFILE "users_data.csv"

--指定外部数据文件,可以是不同格式的数据文件,如csv、txt都支持

可以写多个 INFILE "another_data_file.csv"

指定多个数据文件

truncate                          --操作类型,用 truncate table

来清除表中原有记录,根据情况而定是否需要清楚原有表中数据

INTO TABLE users             --要插入记录的表

Fields

terminated by ","      --数据中每行记录用 "," 分隔

Optionally enclosed by '"'

--数据中每个字段用 '"' 框起,比如字段中有 "," 分隔符时

trailing nullcols

--表的字段没有对应的值时允许为空

(

virtual_column FILLER,    --这是一个虚拟字段,用来跳过由 PL/SQL

Developer 生成的第一列序号

user_id number,           --字段可以指定类型,否则认为是 CHARACTER 类型,

log 文件中有显示

user_name,

login_times,

last_login DATE "YYYY-MM-DD

HH24:MI:SS" -- 指定接受日期的格式,相当用 to_date() 函数转换

)

insert     --为缺省方式,在数据装载开始时要求表为空

append  --在表中追加新记录

replace  --删除旧记录(用

delete from table 语句),替换成新装载的记录

truncate --删除旧记录(用 truncate table

语句),替换成新装载的记录

根据上面的参数写入到一个文本,(将原表truncate后,再插入)

LOAD DATA

INFILE 'D:\load.txt'

INTO TABLE test

TRUNCATE

fields terminated by ','

trailing nullcols

(ENAME,EMPNO,SAL)

C:>sqlldr scott/tiger@ab control=D:\control.txt log=D:\log.txt bad=D:\load\bad.txt

SQL*Loader: Release 11.2.0.1.0 - Production on 星期五 11月 20 15:19:07 2015

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

达到提交点 - 逻辑记录计数 4

达到提交点 - 逻辑记录计数 5

导入成功,违规的记录放在bad.txt里

SQL> select * from emp_enc;

ENAME      EMPNO       SAL

---------- ----- ---------

aa             1    100.00

cc             2    222.00

dd             3    221.00

js             4    231.00

修改控制文件,不请空原表,再导入,会报错

LOAD DATA

INFILE 'D:\load.txt'

INTO TABLE test

fields terminated by ','

trailing nullcols

(ENAME,EMPNO,SAL)

SQL*Loader-601:  对于 INSERT 选项, 表必须为空。表 EMP_ENC 上出错

需要修改控制文件

LOAD DATA

INFILE 'D:\load.txt'APPENDINTO TABLE testfields terminated by ','

trailing nullcols

(ENAME,EMPNO,SAL)sqlload的用法: sqlload keyword=value [,keyword=value,...]

有效的关键字:

userid -- ORACLE 用户名/口令

control -- 控制文件名

log --

日志文件名

bad -- 错误文件名

data -- 数据文件名

discard --

废弃文件名

discardmax -- 允许废弃的文件的数目         (全部默认)

skip -- 要跳过的逻辑记录的数目

(默认 0)

load -- 要加载的逻辑记录的数目  (全部默认)

errors -- 允许的错误的数目

(默认 50)

rows -- 常规路径绑定数组中或直接路径保存数据间的行数

(默认: 常规路径 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  (默认 NO

T_USED)

columnarrayrows -- 直接路径列数组的行数  (默认

5000)

streamsize -- 直接路径流缓冲区的大小 (以字节计)  (默认 256000)

multithreading --

在直接路径中使用多线程

resumable -- 启用或禁用当前的可恢复会话  (默认 FALSE)

resumable_name --

有助于标识可恢复语句的文本字符串

resumable_timeout -- RESUMABLE 的等待时间 (以秒计)  (默认

7200)

date_cache -- 日期转换高速缓存的大小 (以条目计)  (默认 1000)

no_index_errors --

出现任何索引错误时中止加载  (默认 FALSE)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值