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 :

Ouvrir plusieurs fois le même fichier ?


Sujet :

PL/SQL Oracle

  1. #1
    Membre chevronné
    Profil pro
    MOA
    Inscrit en
    Décembre 2002
    Messages
    1 101
    Détails du profil
    Informations personnelles :
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : MOA

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 101
    Points : 2 003
    Points
    2 003
    Par défaut Ouvrir plusieurs fois le même fichier ?
    Hello tout le monde,

    Pour débugger un script PL /SQL (ou plus exactement Forms), j'ai eu l'idée de logger les valeurs des variables dans un fichiers.

    Mon problème :
    J'ai une procédure stockée qui appelle elle même une fonction.

    Dans la procédure stockée mère, pas de souci. Je créé un descripteur de fichier et j'utilise un fopen (avec l'option "a" pour ajouter). Mais dans la fonction fille comment faire ?


    Exemple de la procédure mère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    PROCEDURE POST_FORMS_COMMIT IS
    f_file_id UTL_FILE.FILE_TYPE;
    v_file_location VARCHAR2(256) := 'DIR_LOGDEBUG';
    v_filename_debug VARCHAR2(256) := 'deg.txt';
    v_date_aujourdhui VARCHAR2(256);
     
    BEGIN
    f_file_id := UTL_FILE.FOPEN(v_file_location,v_filename_debug,'w');
    select to_char(sysdate, 'dd/mm/yyyy HH24:MI:ss') into v_date_aujourdhui from dual;
    UTL_FILE.PUT_LINE(f_file_id,v_date_aujourdhui || '****************** DEBUT - POST_FORMS_COMMIT ***************************');
    fonction_fille;
    UTL_FILE.PUT_LINE(f_file_id,v_date_aujourdhui || '****************** FIN - POST_FORMS_COMMIT ***************************');
    UTL_FILE.FCLOSE (f_file_id);
    END;
    Mais dans la fonction appellé, comment dois je procéder ?

    Idéalement, ca serait d'ajouter un argument à la fonction et de transmettre un descripteur de fichier. J'aimerais éviter cela car cela m'obligerai à changer trop la structure du code. Or l'écriture dans le fichier, ca serait pour du débuggage.

    Dois je fermer le fichier avant l'appel de la fonction dans la procédure mère et ensuite je réouvre le fichier dans la fonction fille ?
    Je trouve cette méthode très lourde.

    Je pensais passer par des variables globales mais malheureusment, les variables globales sous Forms sont uniquement de type CHAR comme peu en témoigner la doc : http://sheikyerbouti.developpez.com/...g/?page=Chap38
    Il n'est pas possible de stocker dans une variable globale un descripteur de fichier.

  2. #2
    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
    Vous pouvez peut être suivre l'idée qui suit
    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
    29
     
    declare
      f_file_id utl_file.file_type;
      /*
       * procedure pour tester la recomposition du file_type
       *	p1 et p2 peuvent être initialisés comme globals via sys_context
       */
      procedure p (
        p1  In varchar2,
        p2  in varchar2
      ) Is
        f  utl_file.file_type;  -- local à la procédure
      Begin
        f.id := to_number(p1);
        f.datatype := to_number(p2);
        utl_file.put_line(f, 'dans proc p');    
      End;
    Begin
      f_file_id := utl_file.fopen('DIR_MNI','test.txt','w');
      utl_file.put_line(f_file_id, 'debut');
      /*
       * on décompose file_type et on le passe comme 
       * paramètres  à la procédure (ça pourrait être des globales)
       */
      p(f_file_id.id, f_file_id.datatype);
      utl_file.put_line(f_file_id, 'fin');
      utl_file.fclose(f_file_id);
    end;
    /
    Mais, faite gaffe dans la doc c'est écrit
    Types

    The contents of FILE_TYPE are private to the UTL_FILE package. You should not reference or change components of this record.

    TYPE file_type IS RECORD (
    id BINARY_INTEGER,
    datatype BINARY_INTEGER);

Discussions similaires

  1. Réponses: 7
    Dernier message: 24/08/2007, 14h29
  2. Réponses: 3
    Dernier message: 19/04/2007, 17h19
  3. [RCP] Ouvrir plusieurs fois la même vue
    Par Invité dans le forum Eclipse Platform
    Réponses: 3
    Dernier message: 13/04/2007, 19h51
  4. Est-il possible d'ouvrir plusieurs fois la même page en cliquant sur un même lien ?
    Par aweb01 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 16/05/2006, 20h05
  5. Ouvrir plusieurs fois le même formulaire
    Par Kloun dans le forum Access
    Réponses: 9
    Dernier message: 21/03/2006, 20h47

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