我写了一个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。
有人能指出我正确的方向吗?为什么在第一种情况下错误不会失败?