如果外系统发来的数据,要直接入库,可以提前约定好表结构,以及接收的数据文件格式:
-- Create table
create table SYS_AUTOBATCH_LOG_TEST
(
logid NUMBER(32) not null,
taskcode VARCHAR2(64 CHAR),
taskname NVARCHAR2(64),
starttime DATE,
endtime DATE,
exeresulti VARCHAR2 (10 CHAR),
createtime TIMESTAMP(6) default SYSDATE
)
tablespace TB_SAMS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);
-- Addcomments tothetables
comment on table SYS_AUTOBATCH_LOG_TEST
is '批量自动化任务日志表';
-- Add comments to the columns
comment on column SYS_AUTOBATCH_LOG_TEST.logid
is'主键';
comment on column SYS_AUTOBATCH_LOG_TEST.taskcode
is '任务CODE';
comment on column SYS_AUTOBATCH_LOG_TEST.taskname
is '任务名';
comment on column SYS_AUTOBATCH_LOG_TEST.starttime
is '开始间间';
comment on column SYS_AUTOBATCH_LOG_TEST.endtime
is '结束时问';
comment on column SYS_AUTOBATCH_LOG_TEST.exeresult
is '执行结果,s-执行成功,F-执行失败';
comment on column SYS_AUTOBATCH_LOG_TEST.createtime
is '创建时间';
-- Create/Recreate primary,unigue and foreien key constraints
alter table SYS_AUTOBATCH_LOG_TEST
add constraint SYS_AUTOBATCH_LOG_TEST_PK1 primary key(LOGID)
using index
tablespace TB_SAMS_IDX
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
next 1M
minextent 1
maxextents unlimited
);
要入库的文件数据格式如下:sams_select.dat
编写脚本
#!/bin/sh
script=/sams/bbb/
sqlldr userid=${SAMS_DBURL} control=${script}controlfile.ctl data=sams_select.dat log=log_file.log
# userid是数据库用户名和密码 SAMS/Sump_2020
这里使用到了一个很关键的文件,controlfile.ctl
LOAD DATA
INEILE sams_select. dat
REPLACE
INTO TABLE SYS_AUTOBATCH_LOG_TEST
FIELDS TERMINATED BY '|+|'
TRAILING NULLCOLS
(
LOGID "TRIM(:LOGID)",
TASKCODE,
TASKNAME ,
STARTTIME DATE "yyyy-MM-dd HH24:mi:ss",
ENDTIME DATE "yyyy-MM-dd HH24:mi:ss"
EXERESULT,
CREATETIME TIMESTAMP
# INEILE : 指定输入的文件
# REPLACE : 替换原表中的数据 另外还有APPEND , TRUNCATE等
# FIELDS TERMINATED : 指定以什么作为分隔,根据dat文件是 |+|
# TRAILING NULLCOLS:允许字段值为空。
# 括号内为表字段,注意如果是数字类型、时间类型是怎么转换的
入完库效果:
log_file.log