Ошибка в скрипте оболочки, если программа PL/SQL завершается сбоем

Ошибка в скрипте оболочки, если программа PL/SQL завершается сбоем

В скрипте оболочки я вызываю хранимую процедуру PL/SQL.

sqlplus -s <<EOF
$v_fcp_login
set head off feed off serverout on size 1000000
exec XXIRIS_TEST_K.XXIRIS_TEST('$v_1',$v_2,$v_3,'$v_4',$v_5);
exit
EOF

Но когда в блоке PL/SQL возникает ошибка, мне нужно вывести ошибку из скрипта оболочки, который выполняется как хостовая параллельная программа в Oracle, но он этого не делает.

решение1

Во-первых, вам нужно заставить SQL*Plus выдавать ошибку, если возникает ошибка SQL. Вы можете сделать это, добавив:

WHENEVER SQLERROR EXIT FAILURE

в ваш скрипт SQL (вероятно, наверху). Вы также можете указать различные коды (небольшие неотрицательные целые числа; ненулевые = неудача) вместо слова FAILURE.

Они вернутся в ваш скрипт оболочки в $?. Так что вы можете заставить свой скрипт оболочки реагировать на это. В целом это будет выглядеть примерно так:

sqlplus -s <<EOF
$v_fcp_login
set head off feed off serverout on size 1000000
WHENEVER SQLERROR EXIT FAILURE
exec XXIRIS_TEST_K.XXIRIS_TEST('$v_1',$v_2,$v_3,'$v_4',$v_5);
exit
EOF
if [ 0 -ne "$?" ]; then
    echo "Stored proc blew up." >&2
    exit 1
fi

Конечно, вы можете использовать разные коды выхода для обозначения разных вещей (например, если вы вызываете несколько хранимых процедур, вы можете использовать код выхода 1 для завершения первой процедуры, код выхода 2 для завершения второй процедуры и т. д.)

Связанный контент