IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

Envoi d une valeur pl/sql dans une variable MS-DOS


Sujet :

PL/SQL Oracle

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 15
    Points : 9
    Points
    9
    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 : 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
    @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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Février 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2006
    Messages : 139
    Points : 152
    Points
    152
    Par défaut
    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

  3. #3
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    variable t number
     
    begin
       :t := 10;
    end;
     
    exit :t

  4. #4
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     set retour = sqlplus /NOLOG @script.sql 
    echo %retour%
    Parce que je voit pas comment récupérer t dans mon .bat .

  5. #5
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Résolu grâce à Error_level je peut récupérer le code erreur
    Ca donne ça pour le .bat
    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
     
    @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 : 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
     
    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

  6. #6
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CAP_LOAD(INC_DATE ,MODE_CHARG ,DEBUG_MODE, :t);

  7. #7
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CAP_LOAD(INC_DATE ,MODE_CHARG ,DEBUG_MODE, :t);
    Merci j'optimise de suite.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/03/2009, 15h49
  2. insérer une valeur 'max + 1' dans une table
    Par pierre.egaud dans le forum Access
    Réponses: 2
    Dernier message: 13/04/2006, 15h00
  3. Importer valeur requete SQL dans une Requete
    Par qbihlmaier dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 21/03/2006, 14h24
  4. Réponses: 2
    Dernier message: 15/03/2006, 09h44
  5. Réponses: 6
    Dernier message: 14/02/2006, 20h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo