我试图从shell脚本调用sqlplus命令然后尝试 使用退出状态检查成功/失败。然而,这对于未找到的情况不起作用。当没有为给定输入删除行时,我需要获得非零的退出代码。
sqlplus -s $DB_CONNECTION << EOF
set heading off pages 0 echo off feedback off
WHENEVER SQLERROR EXIT SQL.SQLCODE
BEGIN
DELETE FROM config where Id_ = '1345';
IF SQL%ROWCOUNT = 0 THEN
RAISE NO_DATA_FOUND;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
EXIT 100;
END;
EOF
答案 0 :(得分:1)
PL / SQL EXIT
语句仅适用于LOOP
。检查一下:EXIT Statement。它不等同于shell的exit <exitcode>
或SQL * Plus'exit
。因此,您的PL / SQL块根本不会编译。
此外,对于SQLCODE
等异常,您无法确保Shell将捕获与Oracle no_data_found
相同的退出代码。由于您已经拥有WHENEVER SQLERROR
,因此您可能根本不会包含EXCEPTION
块,只需检查非零退出代码即可。
sqlplus -s $DB_CONNECTION << EOF
set heading off pages 0 echo off feedback off
WHENEVER SQLERROR EXIT SQL.SQLCODE
BEGIN
DELETE FROM config where Id_ = '1345';
IF SQL%ROWCOUNT = 0 THEN
RAISE NO_DATA_FOUND;
END IF;
END;
EOF
exit_code=$?
if [ $exit_code != 0 ]
then
echo "No rows deleted for the given input"
fi