Оператор PL / SQL EXIT
работает только внутри LOOP
. Проверьте это: Оператор EXIT . Это не эквивалентно exit <exitcode>
или SQL * Plus 'exit
. Shell, так что ваш блок PL / SQL не будет компилироваться вообще.
Более того, вы не можете гарантировать, что Shell захватит тот же код завершения, что и у Oracle SQLCODE
, для исключений, подобных 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