sql 加载程序中的错误=n

errors=n in sql loader

我想知道控制文件中ERRORS=n的意义。 如果 SQL 加载程序超过特定值(在本例中为 101 或更高),我们可以使用此选项使它失败吗? 我如何处理 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

是的,这就是它的用途。看到这个 Oracle doc.

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

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

根据文档: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 中使用 return 代码,并在您的代码中使用它。

#!/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