Bonjour,

ça fait plusieurs heures que j'essaie, sans succès, de faire quelque chose qui me paraît pourtant simple ...

en gros, un "ami" ma laissé un script sql qui lui-même contient des appels à des scripts sql par la commande @. Ces scripts contiennent des instructions DDL.
Ca marche bien sauf que je n'arrive pas à intercepter les éventuelles erreurs et du coup arrêter mon traitement ...

En bref :

script1.sql lancé par un .bat ou un .sh

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
set serveroutput on size 1000000;
set linesize 1000
set pagesize 0
set feedback on
set heading  off
set arraysize 7
set echo on
set verif off
set termout on
set trims on
set show off
spool "&6"
 
Whenever sqlerror Exit Failure ;
 
PROMPT appel script2
@script2.sql -- le script DDL
show sqlcode -- affiche tout le temps 0
 
-- ...
et script2.sql, le script contenant les DDL
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
Whenever sqlerror Exit Failure ;
 
CREATE OR REPLACE procedureblabla(code_retour out number) as
BEGIN
END;
/

Le script2 provoque une erreur, ce qui me donne dans la console/le log :
Avertissement : Procédure créée avec erreurs de compilation.

Mais je suis bien incapable de detecter cette erreur par programmation.
La solution du "Whenever sqlerror" semblait bonne mais bon, en fait non ...
Et je n'ai pas envie de passer par du PL et de l'execute immediate (il y a trop de scripts DDLs).

Avez-vous une idée que je puisse exploiter ?

Merci d'avance

In