Bonjour tout le monde,

J'aurai une petite question à vous soumettre, car j'ai pas trouvé de réponse sur le net pour le moment. Donc voici le contexte :

J'utilise sqlplus dans un shellscript linux pour exécuter des procédures stockees oracle et effectuer différentes opérations (query, update etc...), ceci est fait de la manière suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
 
sqlplus -S monuser/monpwd@serv<<!>monlog.txt
set serveroutput on size 1000000
 
 WHENEVER SQLERROR EXIT 1; --When sql error, we leave with error code 1
 WHENEVER OSERROR EXIT 2; --When OS error (eg : pb disk place),we leave with error code 2
 
set echo off
set feed off
set heading on
set linesize 500
set head on
set newpage none
set trimspool on
set verify on
set term on
set wrap on
 
spool myspoolfile
var vdata refcursor
 
--Launching procedure num. 1
exec proc1('tata','toto');
 
--Launching procedure num. 2
exec proc2('tata','toto');
 
--Launching procedure num. 2
exec proc3('tata','toto');
 
--Launching procedure num. 4
prompt elements retour 1 :
prompt ==================
prompt
exec proc4('C',:vdata);
print vdata;
prompt
prompt elements retour 2 :
prompt ===================
prompt
exec proc4('P',:vdata);
print vdata;
 
spool off
exit
!
Dans le shellscript, je teste ensuite le code retour de sqlplus pour savoir si tout c'est bien passé et géré en conséquence, sauf que si la première proc plante et que la deuxième fonctionne, sqlplus renvoie 0 (tout c'est bien passé) alors que ce n'est pas le cas. D'où mes questions :


  • Y a t il un moyen de tester le résultat de la commande exec autrement qu'en utilisant un curseur de sortie pour celle-ci ?
  • Si oui, comment peut-on traité cette information (If then exit 1 enf if; par exemple);

PS : Les procédures stockées ne gèrent pas les exceptions pour que cela "pète" correctement dans sqlplus, car je me suis également aperçu que si gestion d'exception il y a, la commande sqlplus ne renvoie jamais 1. Si là aussi vous avez des suggestions, cela sera le bienvenue

D'avance merci et bonne journée.