Erro no shell script se o programa PL/SQL falhar

Erro no shell script se o programa PL/SQL falhar

No shell script, estou chamando um procedimento armazenado 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

Mas quando há um erro no bloco PL/SQL, preciso errar no shell script, que está sendo executado como um programa host simultâneo no Oracle, mas não está fazendo isso.

Responder1

Primeiro, você precisa fazer com que o SQL*Plus apresente um erro se ocorrer um erro de SQL. Você pode fazer isso adicionando:

WHENEVER SQLERROR EXIT FAILURE

ao seu script SQL (provavelmente no topo). Você também pode fornecer códigos diferentes (pequenos números inteiros não negativos; diferente de zero = falha) no lugar da palavra FAILURE.

Eles retornarão ao seu script de shell no formato $?. Assim, você pode fazer com que seu script de shell reaja a ele. Ao todo, seria algo assim:

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

Claro, você pode usar diferentes códigos de saída para indicar coisas diferentes (por exemplo, se você estivesse chamando vários procedimentos armazenados, poderia sair 1 para o primeiro explodir, sair 2 para o segundo, etc.)

informação relacionada