Error en el script de shell si falla el programa PL/SQL

Error en el script de shell si falla el programa PL/SQL

En el script de shell, estoy llamando a un procedimiento almacenado 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

Pero cuando hay un error en el bloque PL/SQL, necesito eliminar el error del script de shell, que se ejecuta como un programa host concurrente en Oracle, pero no lo hace.

Respuesta1

Primero, necesita hacer que SQL*Plus genere un error si se produce un error de SQL. Puedes hacer esto agregando:

WHENEVER SQLERROR EXIT FAILURE

a su script SQL (probablemente en la parte superior). También puede proporcionar códigos diferentes (enteros pequeños no negativos; distinto de cero = error) en lugar de la palabra FAILURE.

Estos volverán a su script de shell en formato $?. Entonces puedes hacer que tu script de shell reaccione. En total, se vería así:

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

Por supuesto, puede usar diferentes códigos de salida para indicar diferentes cosas (por ejemplo, si estuviera llamando a varios procedimientos almacenados, podría salir 1 para que el primero explote, salir 2 para el segundo, etc.)

información relacionada