Bonjou à tous,

j'ai un soucis avec la gestion des erreurs entre PL/SQL et le script appellant qui est en KSH.

Le problème est que lorsque l'on gère les erreurs PL/SQL avec des Exception handlers, SQLPLUS affiche
PL/SQL procedure successfully completed.
, même si le code PL/SQL a généré une erreur...
Du coup son code de retour est 0

Je vous donne un exemple, qui me pose problème.

Je lance depuis le ksh un script sql:

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
KillSession()
# PURPOSE: Kill all the T24OWNER sessions
#--------------------------------------------------
 
{
sqlplus /nolog << EOF
connect / as sysdba
 
whenever sqlerror exit 2
whenever oserror exit 3
 
@${CUSTOM_BASE}/scripts/sql/kill_session.sql $sid $timestamp
 
EOF
 
ret_kill=$?
 
}
La procédure sql se lance et fait une erreur ORA-00031

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
#################    START   ##########################
Check how many sessions are connected with the T24OWNER user
There are still 17 sessions connected for the user T24OWNER
These sessions will be killed as the script has been launched in offline mode
*********************************************************************
SQLERRM = ORA-00031: session marked for kill
SQLCODE = -31
*********************************************************************
#################    END   ##########################
 
PL/SQL procedure successfully completed.
 
Elapsed: 00:00:00.05
Du coup ma variable ret_kill=$? reçoit 0 et considère que tout c'est passé à merveille!

Comment pourrais faire pour récupérer le code de retour de PL/SQL au lieu de celui de SQLPLUS?????

Merci d'avance pour votre aide

Kaz