sqlldr作为oracle自带的数据导入工具,在对规则数据导入能提供较好的功能;
功能使用:
windows平台下,命令:
sqlldr userid=user/[email protected] control=loader.ctl log=loade.log bad=loader.bad
其中log为日志文件,bad为错误数据文件,可以不显示注明,默认会生成在当前目录下,同样control文件路径不注明则也会在命令所在目录下生成文件。
关键在于书写控制文件内容;格式如下:
OPTIONS -- sqlldr 命令显示的选项可以写到控制文件中,skip=1 用来跳过数据中的第一行,rows=128表示128行提交一次,默认为64;
rows —— 加载的行数,默认值:常规路劲:64,直接路径:全部。常规路径导入时,指定绑定数组中的行数。直接路径导入时,指一次从数据文件只读取的行数。该参数同 时受bindsize制约,如果rows每行实际占用大小超出bindsize的最大可用值,则rows自动降低到bindsize最大可用值。
OPTIONS (skip=1,rows=128)
load data
infile ‘E:\ldr\ldr.csv‘
append into table lp_ldr
fields terminated by ","
Optionally enclosed by ‘"‘
(OWNER,
OBJECT_NAME,
SUBOBJECT_NAME,
OBJECT_ID INTEGER EXTERNAL,
DATA_OBJECT_ID INTEGER EXTERNAL,
OBJECT_TYPE,
CREATED DATE "YYYY-MM-DD HH24:MI:SS",
LAST_DDL_TIME DATE "YYYY-MM-DD HH24:MI:SS",
TIMESTAMP,
STATUS,
TEMPORARY,
GENERATED,
SECONDARY,
NAMESPACE,
EDITION_NAME
)
在列中定义数据类型时大概的意思是不识别,感觉很奇怪怎么识别不了number类型,查了下文档原来sqlldr有自己的数据类型,例如整数类型是INTEGER EXTERNAL,字符类型是CHAR
常见的数据类型:
CHAR 字符类型可以描述数据中的VARCHAR2 或 CHAR 列
DATE 日期类型可以描述数据库的DATE列
INTEGER EXTERNAL 整数类型
FLOAT EXTERNAL 浮点类型
DECIMAL EXTERNAL 小数