1、建立控制文件
OPTIONS (skip=1,rows=128) -- sqlldr 命令显示的选项可以写到这里边来,skip=1 用来跳过数据中的第一行
unrecoverable --表示不记录执行日志,可选参数,不写时默认有执行日志,当数据量很大时可增加此项, 此选项必须要与DIRECT共同应用。
LOAD DATA
INFILE "users_data.csv"--指定外部数据文件,可以写多个 INFILE "another_data_file.csv" 指定多个数据文件--这里还可以使用 BADFILE、DISCARDFILE 来指定坏数据和丢弃数据--的文件,
append --在表中追加新记录
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" (last_login="NULL") -- 当字段为"NULL"时就是 NULL
-- DATE"YYYY-MM-DD HH24:MI:SS" 指定接受日期的格式,相当用 to_date() 函数转换
)
说明:在操作类型 truncate 位置可用以下中的一值:
1) insert --为缺省方式,在数据装载开始时要求表为空
2) append --在表中追加新记录
3) replace --删除旧记录(用 delete from table 语句),替换成新装载的记录
4) truncate --删除旧记录(用 truncate table 语句),替换成新装载的记录
2、执行命令
sqlldr dbuser/dbpass@dbservice control=users.ctl direct=true(此选项必须要与unrecoverable 共同应用。) parallel=true (表示并行执行,默认flase,可选参数)
注意抑制日志的方法:
SQL>ALTER TABLE RESULTXT nologging;
这样不产生REDO LOG,可以提高效率。然后在 CONTROL 文件中 load data 上面加一行:unrecoverable, 此选项必须要与DIRECT共同应用。