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 09/06/2008, 16h17   #1
Invité de passage
 
Inscription : janvier 2008
Messages : 15
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 15
Points : 3
Points : 3
Par défaut Envoi d une valeur pl/sql dans une variable MS-DOS

Je crée ce sujet car je voudais exécuter une procédure stockée à partir d un script dos. L'objectif étant de lui envoyer des paramétre et de gérer les codes retour.

Le code de mon .bat
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@echo off
 
rem V_con_load.bat
rem lancement de la procédure V-Con LOAD
rem %1 = date de chargement
rem %2 = mode de chargement
rem %3 = debuggage
rem %4 = valeur de retour
 
SET OraUser=login
SET UserPwd=pwd
SET ORACLE_SID=instance
 
SET INC_DATE=%1
SET MODE_CHARG=%2 
SET DEBUG_MODE=%3 
SET CODE_RETOUR=%4 
 
 
 
sqlplus /NOLOG @V_con_load.sql %INC_DATE% %MODE_CHARG% %DEBUG_MODE% %CODE_RETOUR% %OraUser% %UserPwd% %ORACLE_SID%
Le code du fichier sql (je teste avec des spool mais c'est pas terrible)
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
connect &5/&6@&7
spool temp.log
SET serveroutput ON
DECLARE
  CODE_RETOUR NUMBER;
BEGIN
  CAP_LOAD('&1', '&2' , &3, CODE_RETOUR);
  DBMS_OUTPUT.PUT_LINE('CODE_RETOUR : ' || CODE_RETOUR);
END;
/
SET serveroutput off
spool off
quit
Si quelqun à déjà réussit a récuperer une varible pl dans une variable dos , ça m intéresse. J'ai chercher à le faire avec la commande host mais aucun résultat.
ArCal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2008, 21h50   #2
Membre habitué
 
Inscription : février 2006
Messages : 139
Détails du profil
Informations personnelles :
Âge : 37
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : février 2006
Messages : 139
Points : 126
Points : 126
Bonsoir,

je ne pense pas qu'il soit possible de lire du pl via du dos.
Je ne connais pas suffisamment le dos mais ce qui me paraitrait plus realisable serait d'encapsuler le pl dans du java ou du C.
Sinon on peut peut-etre lire le spool mais la ca devient un peu degueulasse....

Pour moi tu es aux limites du dos et devrais envisager de travailler avec un langage plus simple à interfacer avec sql.
Mais bon encore une fois, je ne suis pas expert en dos et je suis toujours surpris par ce qu'il est possible de faire avec ce langage

Cdt
kervoaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2008, 10h36   #3
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 320
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 320
Points : 5 839
Points : 5 839
D'abord voila un lien qui parle des choses similaires.

Ensuite un exemple de comment utiliser une variable sqlplus pour envoyer un code retour
Code :
1
2
3
4
5
6
7
8
 
variable t number
 
begin
   :t := 10;
end;
 
exit :t
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2008, 12h35   #4
Invité de passage
 
Inscription : janvier 2008
Messages : 15
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 15
Points : 3
Points : 3
Citation:
Envoyé par mnitu Voir le message
D'abord voila un lien qui parle des choses similaires.

Ensuite un exemple de comment utiliser une variable sqlplus pour envoyer un code retour
Code :
1
2
3
4
5
6
7
8
 
variable t number
 
begin
   :t := 10;
end;
 
exit :t
Un truc que je comprend pas c'est comment tu récupére t dans ton cmd ?
avec un truc comme ça :
Code :
1
2
 SET retour = sqlplus /NOLOG @script.sql 
echo %retour%
Parce que je voit pas comment récupérer t dans mon .bat .
ArCal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2008, 13h51   #5
Invité de passage
 
Inscription : janvier 2008
Messages : 15
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 15
Points : 3
Points : 3
Résolu grâce à Error_level je peut récupérer le code erreur
Ca donne ça pour le .bat
Code :
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
 
@echo off
rem V_con_load.bat
rem lancement de la procédure V-Con LOAD
rem %1 = date de chargement
rem %2 = mode de chargement
rem %3 = debuggage
rem %4 = valeur de retour
 
rem les paramétres de login oracle
SET OraUser=login
SET UserPwd=password
SET ORACLE_SID=instance
rem j aurai pu les mettre en paramétres
 
rem les paramétres de ma procédure
SET INC_DATE=%1
SET MODE_CHARG=%2 
SET DEBUG_MODE=%3 
SET CODE_RETOUR=%4 
 
rem appel de ma procédure avec sqlplus
sqlplus /NOLOG @V_con_load.sql %INC_DATE% %MODE_CHARG% %DEBUG_MODE% %CODE_RETOUR% %OraUser% %UserPwd% %ORACLE_SID% > nul
 
rem affichage du code retour
echo ON
echo  %ERRORLEVEL%
echo off
Le fichier sql
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
whenever sqlerror exit failure
WHENEVER SQLERROR EXIT SQL.SQLCODE; 
connect &5/&6@&7
variable t number
DECLARE
  INC_DATE VARCHAR2(10);
  MODE_CHARG VARCHAR2(5);
  DEBUG_MODE VARCHAR2(20);
  CODE_RETOUR NUMBER;
BEGIN
  INC_DATE := '&1';
  MODE_CHARG := '&2';
  DEBUG_MODE := &3;
 
  CAP_LOAD(INC_DATE ,MODE_CHARG ,DEBUG_MODE, CODE_RETOUR);
  :t  := CODE_RETOUR;
END;
/
exit :t
ArCal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2008, 16h38   #6
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 320
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 320
Points : 5 839
Points : 5 839
Je vois que tu t'es bien débrouillé.
Petit remarque, dans ton code tu n’a pas besoin de deux variables, tu peut passer la variable t directement dans ta procédure

Code :
1
2
 
CAP_LOAD(INC_DATE ,MODE_CHARG ,DEBUG_MODE, :t);
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2008, 17h18   #7
Invité de passage
 
Inscription : janvier 2008
Messages : 15
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 15
Points : 3
Points : 3
Citation:
Envoyé par mnitu Voir le message
Je vois que tu t'es bien débrouillé.
Petit remarque, dans ton code tu n’a pas besoin de deux variables, tu peut passer la variable t directement dans ta procédure

Code :
1
2
 
CAP_LOAD(INC_DATE ,MODE_CHARG ,DEBUG_MODE, :t);
Merci j'optimise de suite.
ArCal est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h26.


 
 
 
 
Partenaires

Hébergement Web