Chaque fois que j'exécute un script sql en utilisant Sql * plus et vérifie $?, J'obtiens 0 même lorsque le script n'a pas réussi.
Exemple
#$ 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
$
Je voudrais qu'il renvoie une valeur non nulle lorsqu'une erreur se produit.
Comment puis-je y parvenir?
Vous devez explicitement dire à sqlplus
de le faire, dans votre script. Fondamentalement, vous pouvez utiliser deux instructions:
WHENEVER SQLERROR EXIT SQL.SQLCODE
WHENEVER OSERROR EXIT
Par exemple:
WHENEVER SQLERROR EXIT SQL.SQLCODE
begin
SELECT COLUMN_DOES_NOT_EXIST FROM DUAL;
END;
/
Et pour les erreurs OS:
WHENEVER OSERROR EXIT FAILURE
START no_such_file
Pour plus d'informations, voir this et that .
J'espère que ça aide. Bonne chance!
Vlad est la réponse que j'utiliserais. Pour augmenter le sien, cependant, j'essaie d'utiliser une instruction EXIT explicite si j'ai vraiment besoin de ce statut de retour. Par exemple
column status_for_exit new_value exitcode noprint
select status_computation (parm, parm) as status_for_exit from dual;
exit &exitcode;
La meilleure action pourrait être une combinaison des autres idées de cette page et des idées de
Créez un fichier login.sql ou modifiez le fichier global pour
WHENEVER OSERROR EXIT FAILURE
WHENEVER SQLERROR EXIT SQL.SQLCODE
à l'intérieur. Ensuite, si le fichier n'existe pas, il affichera une erreur. Si une ligne échoue, elle sortira en erreur.
Cependant, gardez à l'esprit que, comme le disent les documents sur: https://docs.Oracle.com/cd/E11882_01/server.112/e16604/ch_twelve052.htm#SQPUG135 que certaines commandes ne fonctionneront toujours pas erreur comme vous pouvez vous y attendre.