В скрипте оболочки я вызываю хранимую процедуру 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 для завершения второй процедуры и т. д.)