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 :

Récupérer le résultat d'une procédure PL/SQL dnas un fichier.


Sujet :

PL/SQL Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 6
    Par défaut Récupérer le résultat d'une procédure PL/SQL dnas un fichier.
    Bonjour à tous,


    Il y a relativement longtemps, mais dans notre galaxie, j'ai fait des choses en SQl et PL/SQL sur des BDD Orcale.

    J'ai un peu quitté le milieu, mais aujourd'hui, pour mon taff, j'ai a modifier une procédure pour la patcher. Et vu qu'y a personne dans le coin et que le seul qui sait faire ça est en vacances, le fourbe, c'est Bibi qui s'y colle.


    En gros, j'ai une procédure (déjà écrite, à 2/3 modif' près) a qui je veux faire sortir à la fin un fichier de log, pour voir ce qu'il s'est passé.


    Le fichier serait du type Result_MaProcédure_JJ_MM_AAAA avec dedans, un truc du style:

    - "Tout s'est passé nickel chrome, a demain".
    ou
    - "Ca a merdouillé grave à cet endroit, et plus précisement <MESSAGE D'ERREUR ORACLE>"


    Donc comment puis-je faire pour récupérer le message de réussite (un DBMS.output bête et méchant, j'imagine) ou le message d'erreur et de le mettre dans un fichier Result_MaProcédure_JJ_MM_AAAA, rangé dans un répertoire /Log_MaProcédure/ (sous un syteme Unix) ?

    Mes connaissances dans ce domaine sont assez limitées et surtout vachement poussiéreuses.


    Merci d'avance et bonne journée
    McKenzie.

    PS: ce site m'a été conseillé par un ami qui m'en a dit que du bien.

  2. #2
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 9
    Par défaut
    Salut !
    C'est marrant j'ai eu exactement la même chose à faire dernièrement, mais j'ai eu la chance de partir de codes source que l'on m'a filés !
    Je sais pas comment est ta procédure mais en gros en tout début mon fichier sql je mets :
    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
    WHENEVER OSERROR EXIT FAILURE
    WHENEVER SQLERROR EXIT SQL.SQLCODE
    set serveroutput on
    set echo off
    set pause off
    set linesize 200
    set pagesize 50000
    set newpage none
    set heading off
    set feedback off
    set term off
    spool &2 
    CONNECT &1
    DECLARE
    /* mon programme */
    où &1 est un paramètre en entrée de connexion usr/mdp
    et &2 est le chemin du fichier log
    L'option "spool" (d'après ce que j'ai compris) permet d'écrire dans un buffer temporaire puis d'écrire dans le fichier stipulé.
    Après dans ton programme tu gères les erreurs avec tes blocs "exception" et des "dbms_output.put" qui sortiront dans ton log (pardon je fait un copier/coller bête et méchant):
    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
    Exception 
          when no_data_found Then -- on est arrivé à la fin du fichier d'entrée
    		   dbms_output.put_line('|* When no_data_found principal *|'); 
    		   if tag_erreur then 
    		   	rollback;
    		   	dbms_output.put_line('|* Code Erreur : ' || sqlcode);
    		   	dbms_output.put_line('|* Message Erreur : ' || sqlerrm); 			
    	  	   	end if;
    		   commit;
    		   dbms_output.put_line('Cpt Lignes APPRO = ' || cpt_ligne || ' / Cpt Lignes GOLD correspondantes = ' || cpt_ligne_out); 
     		   dbms_output.put_line('MSG=fin des messages');
      		   dbms_output.put_line('LOG=fin du script: '||to_char(sysdate,'HH24:MI:SS'));
    		   UTL_FILE.FCLOSE( LF$FicIN ) ; -- fermeture du fichier
    	  when others Then
    	  		rollback;
    	  		commit;
    	  		UTL_FILE.FCLOSE_ALL ;
    	  		dbms_output.put_line('|*                                                                        *|');
    	  		dbms_output.put_line('|*                                   ROLLBACK                             *|');
    			dbms_output.put_line('|*************************Interruption du programme************************|');
       END ;
    Ensuite je sais pas comment tu dois appeler ton programme, mais moi j'ai créé un fichier shell où je lance la commande avec sqlplus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sqlplus /NOLOG @${myProgram} ${ChaineConnectionUSR_MDP} ${monFichierLST} >> ${monFichierLOG}
    Le fichier lst est pas indispensable je pense.
    J'ai défini les variables suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    monFichierLST = "mon_chemin_unix/repertoire_logs/myFileLst.lst"
    monFichierLOG = "mon_chemin_unix/repertoire_logs/myFileLog.log"
    Ensuite pour gérer des noms de fichier log uniques, je définis dans mon shell :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # Variable identifiant unique
    gsIdUnique=${$}.$(date "+%m%d%H%M%S")
    Et je gère mes noms de fichiers comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monFichierLOG=/mon_repertoire/monFichierLog_${gsIdUnique}".log"
    J'obtiens alors un nom de fichier du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monFichierLog_0530115206.log
    J'espère que ça répond en partie à tes questions !
    En tout cas je compatis car on tombe tous sur des galères au boulot
    Bon courage !

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 6
    Par défaut
    Merci, ca a l'air bien comme il me faut !

  4. #4
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 9
    Par défaut
    Ravie d'avoir pu t'aider !
    Si ça t'as un souci je peux t'envoyer mes sources qui marchent, c'est plus simple de partir de fichiers existants...
    Bonne continuation !

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/07/2008, 13h18
  2. [DELPHI 6.0][ADO] Récupérer le résultat d'une procédure stockée
    Par Invité dans le forum Bases de données
    Réponses: 3
    Dernier message: 26/05/2008, 10h24
  3. Comment récupérer le résultat d'une procédure stockée (OUT parameter) ?
    Par java2008 dans le forum Interfaces de programmation
    Réponses: 1
    Dernier message: 08/04/2008, 13h00
  4. Récupérer le résultat d'une procédure stockée
    Par DanZzz dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 28/11/2006, 22h08
  5. [C#] Récupérer le résultat d'une procédure stockée
    Par fabrice1596 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 18/10/2004, 13h45

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