sql loader中的errors = n

时间:2018-03-12 11:56:27

标签: oracle shell unix sql-loader

我想知道控制文件中ERRORS = n的重要性。 如果SQL加载器超过特定值(在这种情况下为101或更高),我们是否可以使用此选项使SQL加载程序失败? 如何处理Unix中失败场景的退出状态? 当SQL加载程序达到错误数时会发生什么?

考虑以下示例:

SQLLDR CONTROL=sample.ctl, LOG=sample.log, BAD=baz.bad, DATA=etc.dat 
USERID=scott/tiger, ERRORS=100, LOAD=2000, DISCARD=toss.dsc,
DISCARDMAX=5

2 个答案:

答案 0 :(得分:2)

根据文件:SQL* Loader

对于UNIX,退出代码如下:

ALL ROWS LOADED SUCCESSFULLY                                    0
ALL OR SOME ROWS REJECTED                                       2
ALL OR SOME ROWS DISCARDED                                      2
DISCONTINUED LOAD                                               2
COMMAND-LINE OR SYNTAX ERRORS                                   1
ORACLE ERRORS NONRECOVERABLE FOR SQL*LOADER                     1
OPERATING SYSTEM ERRORS (SUCH AS FILE OPEN/CLOSE AND MALLOC)    1

因此,您可以在执行$?后使用sqlldr运算符在Unix中使用返回代码,并在代码中使用它。

#!/usr/bin/sh
SQLLDR CONTROL=sample.ctl, LOG=sample.log, BAD=baz.bad, DATA=etc.dat 
USERID=scott/tiger, ERRORS=100, LOAD=2000, DISCARD=toss.dsc,
DISCARDMAX=5
exit_code=$?
if [[ ${exit_code} -ne 0 ]] 
then
  echo "Failed"
  #The commands to run for failed scenario.
  #...
fi

答案 1 :(得分:1)

是的,这就是它的意思。请参阅此Oracle doc

errors -- number of errors to allow            (Default 50)

如果错误数超过此值,SQL加载程序将停止加载。设置errors=0将使加载程序忽略所有错误。