Erro ao sair do shell script se o programa PL / SQL falhar

1

No script de shell, 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, eu preciso errar o shell script, que está sendo executado como um programa concorrente do host no Oracle, mas não está fazendo isso.

    
por sam 30.09.2013 / 20:26

1 resposta

1

Primeiro, você precisa obter o SQL * Plus para eliminar erros se ocorrer um erro de SQL. Você pode fazer isso adicionando:

WHENEVER SQLERROR EXIT FAILURE

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

Estes voltarão ao seu script de shell em $? . Então você pode ter seu script de shell reagir a ele. Ao todo, seria algo como isto:

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

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

    
por 30.09.2013 / 22:49