oracle - reembolso - Sql*plus siempre devuelve el código de salida 0?
qué hacer si no me llega un pedido de ebay (3)
La mejor acción podría ser una combinación de las otras ideas en esta página y las ideas en
Ayuda con SQLPLUS por favor? ¿Cómo hacer que SQLPLUS arranque con DEFINE `OFF` inicialmente?
Cree un archivo login.sql o edite el archivo global para tener
WHENEVER OSERROR EXIT FAILURE
WHENEVER SQLERROR EXIT SQL.SQLCODE
dentro de eso. Entonces, si el archivo no existe, se producirá un error. Si una línea falla, se producirá un error.
Sin embargo, tenga en cuenta que, como dicen los documentos en: https://docs.oracle.com/cd/E11882_01/server.112/e16604/ch_twelve052.htm#SQPUG135, algunos comandos seguirán sin error, como cabría esperar.
Cada vez que ejecuto un script sql usando Sql * plus y verifico $ ?, obtengo 0 incluso cuando el script no fue exitoso.
Ejemplo
#$ sqlplus user/password@instance @script.sql
SQL*Plus: Release 10.2.0.1.0 - Production on Wed Aug 7 14:20:44 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle9i Enterprise Edition Release 9.2.0.8.0 - 64bit Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.8.0 - Production
v$dataf-ile d,
*
ERROR at line 6:
ORA-00933: SQL command not properly ended
Disconnected from Oracle9i Enterprise Edition Release 9.2.0.8.0 - 64bit Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.8.0 - Production
$ echo $?
0
$
Me gustaría que devuelva un valor distinto de cero cuando se produce un error.
¿Cómo puedo lograr eso?
Tienes que decirle explícitamente a sqlplus
que haga eso en tu script. Básicamente, hay dos declaraciones que puede usar:
-
WHENEVER SQLERROR EXIT SQL.SQLCODE
-
WHENEVER OSERROR EXIT
Por ejemplo:
WHENEVER SQLERROR EXIT SQL.SQLCODE
begin
SELECT COLUMN_DOES_NOT_EXIST FROM DUAL;
END;
/
Y para los errores del sistema operativo:
WHENEVER OSERROR EXIT FAILURE
START no_such_file
Para obtener más información, vea esto y aquello .
Espero eso ayude. ¡Buena suerte!
Vlad es la respuesta que usaría. Para aumentar el suyo, sin embargo, intento usar una declaración EXIT explícita si realmente necesito ese estado de devolución. Por ejemplo
column status_for_exit new_value exitcode noprint
select status_computation (parm, parm) as status_for_exit from dual;
exit &exitcode;