我正在使用SQL * Loader将一堆数据从文件加载到数据库中的表。 我的控制文件是:
OPTIONS (DIRECT=FALSE)
LOAD DATA
INFILE *
BADFILE *
APPEND
INTO TABLE TDE_MIDINERO
(
ACTIVA POSITION(1:20) CHAR(20),
TIPUSACT POSITION(21:21) CHAR(1),
IMPREINT POSITION(22:32) DECIMAL EXTERNAL(11) ":IMPREINT/100",
NUMREINT POSITION(33:37) INTEGER EXTERNAL,
REINTEGROS_MES1 POSITION(38:48) DECIMAL EXTERNAL(11) ":REINTEGROS_MES1/100",
REINTEGROS_MES2 POSITION(49:59) DECIMAL EXTERNAL(11) ":REINTEGROS_MES2/100",
REINTEGROS_MES3 POSITION(60:70) DECIMAL EXTERNAL(11) ":REINTEGROS_MES3/100",
REINTEGROS_MES4 POSITION(71:81) DECIMAL EXTERNAL(11) ":REINTEGROS_MES4/100",
REINTEGROS_MES5 POSITION(82:92) DECIMAL EXTERNAL(11) ":REINTEGROS_MES5/100",
REINTEGROS_MES6 POSITION(93:103) DECIMAL EXTERNAL(11) ":REINTEGROS_MES6/100",
REINTEGROS_MES7 POSITION(104:114) DECIMAL EXTERNAL(11) ":REINTEGROS_MES7/100",
REINTEGROS_MES8 POSITION(115:125) DECIMAL EXTERNAL(11) ":REINTEGROS_MES8/100",
REINTEGROS_MES9 POSITION(126:136) DECIMAL EXTERNAL(11) ":REINTEGROS_MES9/100",
REINTEGROS_MES10 POSITION(137:147) DECIMAL EXTERNAL(11) ":REINTEGROS_MES10/100",
REINTEGROS_MES11 POSITION(148:158) DECIMAL EXTERNAL(11) ":REINTEGROS_MES11/100",
REINTEGROS_MES12 POSITION(159:169) DECIMAL EXTERNAL(11) ":REINTEGROS_MES12/100",
ACUMULADO POSITION(170:182) DECIMAL EXTERNAL(13) ":ACUMULADO/100",
IMPMAX POSITION(183:195) DECIMAL EXTERNAL(13) ":IMPMAX/100",
IMPLIMIT POSITION(196:208) DECIMAL EXTERNAL(13) ":IMPLIMIT/100",
DATULTM sysdate,
CAJERO POSITION(209:213) INTEGER EXTERNAL,
DATUDIA POSITION(214:222) INTEGER EXTERNAL,
DATUMES POSITION(223:231) INTEGER EXTERNAL
)
字段“Activa”是主键。 我的问题是SQL * Loader没有阻止具有相同主键的重复记录。
怎么能避免这个?我的表有很多重复记录,其索引已损坏。 在将它们插入表格之前,有没有办法丢弃它们(或将它们放在坏文件中)?
提前谢谢
答案 0 :(得分:1)
如果在要加载的表上创建主键约束,则在键的给定值的第一个之后重复记录将被丢弃到坏文件中。只需将ERRORS参数设置为较高的值,以便在50次错误后导入不会停止。
当然,这是处理重复项的粗略方法:或者,您可以将所有记录加载到临时表中,并使用SQL查询对其进行重复删除。