Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/02/2011, 17h50   #1
Membre confirmé
 
Inscription : décembre 2002
Messages : 450
Détails du profil
Informations forums :
Inscription : décembre 2002
Messages : 450
Points : 265
Points : 265
Par défaut Transmettre code erreur PLSQL à un .SQL puis à un .bat BATCH

Bonjour,

J'ai un script .bat qui appel un fichier .sql qui appelle une procédure :

Pour le moment, j'ai cela :
Fichier .bat
Code :
sqlplus user/pass@base@procedure.sql
Fichier .sql
;


Pour pouvoir récupérer le code erreur, j'ai cru comprendre qu'il fallait faire un bloc anonyme dans le fichier .sql.

Mon nouveau fichier .sql :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
WHENEVER SQLERROR EXIT 1 ROLLBACK
WHENEVER OSERROR EXIT 1 ROLLBACK
SET echo ON
SET serveroutput ON size 100000
SET pause off
SET feedback ON
SET verify ON
SET term ON
SET LINES 115
DECLARE
BEGIN 
DBMS_OUTPUT.PUT_LINE('Beginning select');
@MA_PROCEDURE;
END;
Mon fichier .bat n'a pas bougé.

Ma question est :
Coté PL/SQL, dans ma procédure MA_PROCEDURE comment envoyer l'erreur ?

Je pensais utilisé la commande EXIT mais cette commande ne semble pas être pour. Il semblerait que ce soit uniquement pour quitter une boucle (une sortie de break en php par exemple)
Documentation EXIT de dvp : http://sheikyerbouti.developpez.com/...e=Chap1#L1.2.7


Je me suis reféré à ces posts
http://www.unix.com/fr/unix-dummies-...out-param.html
http://www.developpez.net/forums/d10...t-sql-sqlcode/
weed est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 19h09   #2
Membre confirmé
 
Inscription : décembre 2002
Messages : 450
Détails du profil
Informations forums :
Inscription : décembre 2002
Messages : 450
Points : 265
Points : 265
Bon je pense être sur la bonne voie. Il faut que j'utilise les errorlevel pour .bat ...

Le .bat
Code :
1
2
3
4
5
@ECHO ON
VERIFY ON
SET SortDate=%date%
sqlplus user/pass@base@procedure.sql
echo %ERRORLEVEL%
Et après dans le SQL, il faut que j'ai la section EXCEPTION, je pense :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
WHENEVER SQLERROR EXIT 1 ROLLBACK
WHENEVER OSERROR EXIT 1 ROLLBACK
SET echo ON
SET serveroutput ON size 100000
SET pause off
SET feedback ON
SET verify ON
SET term ON
SET LINES 115
DECLARE
BEGIN 
DBMS_OUTPUT.PUT_LINE('Beginning select');
@MA_PROCEDURE;
EXCEPTION
WHEN OTHERS THEN
   DBMS_OUTPUT.PUT_LINE('toto');   
   RETURN 4;
END;

Et dans la procédure MA_PROCEDURE, je mets :
Code :
raise_application_error(-1,'testing exit code...');
mais je n'arrive toujours pas à récuperer le code
weed est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 19h47   #3
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 311
Points : 5 808
Points : 5 808
J'ai l'impression que vous cherchez 9.17 Using a Variable for the SQL*Plus Return Status
Ici EXIT est une commande sqlplus, rien à voir avec EXIT du PL/SQL.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2011, 10h37   #4
Membre confirmé
 
Inscription : décembre 2002
Messages : 450
Détails du profil
Informations forums :
Inscription : décembre 2002
Messages : 450
Points : 265
Points : 265
En effet, lorsque je fais un :

Fichier .bat
Code :
1
2
3
4
5
@ECHO ON
VERIFY ON
SET SortDate=%date%
sqlplus user/pass@base@procedure.sql
echo %ERRORLEVEL

et dans le fichier .sql
echo %ERRORLEVEL => renvoie 4.

Maintenant, j'aimerai renvoyer le code retour 4 (par exemple) à partir du bloc anonyme PL/SQL dans le fichier SQL.

J'ai essayé avec un exit juste avant le lancement de la procédure dans le bloc anonyme dans le fichier SQL.

C'est un test pour transmettre le code erreur du fichier .SQL au fichier .BAT dans un premier temps. Chaque chose en son temps.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
WHENEVER SQLERROR EXIT 1 ROLLBACK
WHENEVER OSERROR EXIT 1 ROLLBACK
SET echo ON
SET serveroutput ON size 100000
SET pause off
SET feedback ON
SET verify ON
SET term ON
SET LINES 115
DECLARE
BEGIN 
DBMS_OUTPUT.PUT_LINE('Beginning select');
EXIT :4
@MA_PROCEDURE;
EXCEPTION
WHEN OTHERS THEN
   DBMS_OUTPUT.PUT_LINE('toto');   
END;
J'ai essayé exit sous plusieurs forme :
exit 4
exit '4'
ext :4
exit :'4'
return 4

mais malheureusement
echo %ERRORLEVEL => renvoie toujours 1.
weed est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2011, 10h40   #5
Membre confirmé
 
Inscription : décembre 2002
Messages : 450
Détails du profil
Informations forums :
Inscription : décembre 2002
Messages : 450
Points : 265
Points : 265
Citation:
Envoyé par mnitu Voir le message
J'ai l'impression que vous cherchez 9.17 Using a Variable for the SQL*Plus Return Status
Ici EXIT est une commande sqlplus, rien à voir avec EXIT du PL/SQL.
J'ai vu qu'il fallait que je passais par un bloc anonyme dans mon fichier .SQL qui appelle ma procédure.
Dans ce cas là, si je ne peux pas utiliser le EXIT dans mon bloc, que dois je utiliser ?
j'ai testé return, cela ne fonctionne pas non plus.
weed est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2011, 13h59   #6
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 311
Points : 5 808
Points : 5 808
Quelque chose comme ça:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
variable ret_code number
BEGIN 
  :ret_code := 0;
  DBMS_OUTPUT.PUT_LINE('Beginning select');
@MA_PROCEDURE;
EXCEPTION
WHEN OTHERS THEN
   DBMS_OUTPUT.PUT_LINE('toto');   
   :ret_code := 4;
END;
/
EXIT :ret_code
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h42.


 
 
 
 
Partenaires

Hébergement Web