当使用“ WHENEVER SQLERROR EXIT 1”时,为什么sqlplus bash脚本不为ORA-02291完整性约束返回错误?

时间:2018-09-22 18:53:14

标签: bash sqlplus heredoc

我写了一个bash脚本来连接到sqlplus并执行特定文件夹中的所有sql脚本。下面是脚本的执行方法。

execute() {
if [ ! -d "$DIR_SqlFiles" ]
then
echo "No sql files were found. Cannot find path ${DIR_SqlFiles}"
return 1
fi
echo "`date` :Connecting To ${userName}/******@${serviceName}";
for file in `ls ${DIR_SqlFiles}/*` ; do
echo "`date` :Executing file $file..."
echo "`date` :SQL OUTPUT:";
sqlplus -s ${userName}/${password}@${host}:${port}/${serviceName} <<EOF
WHENEVER OSERROR EXIT 1 ROLLBACK;
WHENEVER SQLERROR EXIT 1 ROLLBACK
@${file};
commit;
quit;
EOF
sql_return_code=$?
if [ ${sql_return_code} != 0 ]
then
echo "`date` ${file} failed"
echo "Error code ${sql_return_code}"
return 1;
fi
done
echo "`date` :completed running all sql scripts in the ${DIR_SqlFiles} folder."
return 0;
}

问题是当.sql文件之一具有ORA-02291:完整性约束此脚本不会失败。它返回0,只打印“ 0行已更新”,而没有打印实际错误。

在其他情况下,它可以正常工作。例如,如果表名称错误(ORA-00942:表或视图不存在),脚本将失败并返回1。

有人能指出我正确的方向吗?为什么在第一种情况下错误不会失败?

0 个答案:

没有答案