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

Oracle Discussion :

Génération de lignes entières avec TEXT_IO.PUT


Sujet :

Oracle

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Juin 2002
    Messages : 55
    Points : 37
    Points
    37
    Par défaut Génération de lignes entières avec TEXT_IO.PUT
    Bonjour à tous,

    Je vous explique mon problème ; je dois générer dans un fichier texte des données correspondant à des enregistrements de ma base de données. Mon problème réside dans le traitement du cas où l'espace disque est dépassé voici ce qui se passe :

    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
    declare
     
    cursor mes_clients is select * from clients;
    out_file TEXT_IO.FILE_TYPE;
     
    begin
       out_file     := TEXT_IO.FOPEN('c:\toto','W');
       for w_client in mes_clients loop
          begin
    	TEXT_IO.PUT(out_file, RPAD(NVL(w_client.numero_client,' '),15,' ')||                                 
            RPAD(NVL(w_client.nom_client,' '),5,' ')||
            RPAD(nvl(w_client.date_naissance,' '),10,' ')||
            RPAD(NVL(w_client.ville,' '),10,' ');
          exception
          WHEN OTHERS THEN
          pr_erreur('CXCLIENTS',w_num_fic , 'numero_client', n, 'erreur creation');
          end;
       end loop;
    end;
    Quand l'espace disque est saturé, une dernière ligne est insérée, mais malheureusement, elle n'est pas générée entièrement. Pour les enregistrements suivant, on passe bien dans l'exception.
    Ce que j'aurais voulu c'est que dès qu'une ligne ne peux pas être insérée entièrement on passe dans l'exception. Est-ce que quelqu'un aurait une idée ?

    Merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Pourquoi n'utilisez-vous pas PUT_LINE() ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Juin 2002
    Messages : 55
    Points : 37
    Points
    37
    Par défaut
    1) Désolé, je n'ai pas précisé dans mon code que je faisais un retour à la ligne pour chaque enregistrement.
    2) Donc la fonction PUT_LINE pourrait très bien marcher. il est vrai
    3) Si je l'utilise pas c'est que je débute et que je reprend du code fait avec les pieds... si si c'est possible
    4) J'ai testé avec le PUT_LINE avec une lueur d'espoir dans les yeux, mais malheureusement le résultat est le même, la dernière ligne coupée en cours de route et aucun passage dans l'exception...
    5) Je viens de m'apercevoir aussi que le client suivant ne passe pas dans l'exception bien qu'il ne soit pas généré dans le fichier

    ... AIDEZ MOI !!

  4. #4
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Comment avez-vous la certitude qu'il ne passe pas dans le bloc exception ?

  5. #5
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Je ne sais pas si tu as la fonction FFLUSH présente dans UTL_FILE ou un équivalent qui écrit physiquement sur disque les données présentes dans le buffer. Je pense que si après chaque écriture tu fais un flush, le message d'erreur surgira dès qu'il n'est plus possible d'écrire dans ton fichier.


    Laly.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Juin 2002
    Messages : 55
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par SheikYerbouti
    Comment avez-vous la certitude qu'il ne passe pas dans le bloc exception ?
    La fonction pr_erreur m'insère des données dans la base et de toute façon, j'ai fait des traces dans le programme pour suivresa progression et il ne pas pas dedans, j'en suis sùr

    Citation Envoyé par lalystar
    Je ne sais pas si tu as la fonction FFLUSH présente dans UTL_FILE ou un équivalent qui écrit physiquement sur disque les données présentes dans le buffer.
    non, je n'ai pas, mais je vais chercher un peu en ce sens...

  7. #7
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Pas de problème, la fonction UTL_FILE.FFLUSH() existe depuis au moins la 8i

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Juin 2002
    Messages : 55
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par SheikYerbouti
    Pas de problème, la fonction UTL_FILE.FFLUSH() existe depuis au moins la 8i
    ... C'est bien ce que je pensais... Je suis en 6i (non, ne jetez pas de pierre, je travaille avec les outils qu'on me donne)

    En passant, J'ai fait d'autres essais et l'enregistrement fantôme qui n'apparait ni dans le fichier ni dans mes erreur n'est pas systématique. Il peut y en avoir 1 ou plus (j'ai eu jusqu'à 6 enregistrements partis dans es courants d'air), je pense que cela vient du fait que les écritures dans le fichiers sont buffurisées et écrire dans le buffer ne génère pas d'exception mais dès que le système a décidé de les écrire il écrit tout ce qu'il peut écrire puis lève des exceptions par la suite... Même si j'ai un élément de réponse, ça ne m'aide toujours pas tout ça

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Juin 2002
    Messages : 55
    Points : 37
    Points
    37
    Par défaut
    Je viens d'en discuter avec un collègue, j'ai trouvé un moyen de contourner la difficulté. S'il y a un quelconque problème lors de la génération du fichier je le supprime et on relance la génération après libération de l'espace... Et hop, ça ira bien

    Citation Envoyé par SheikYerbouti
    Pas de problème, la fonction UTL_FILE.FFLUSH() existe depuis au moins la 8i
    On m'a dit que c'était un procédure de base de données et non un procédure forms (outil que j'utilise en version 6i) donc je pourrais l'utiliser mais ca me pose un problème pour une question de droits en écriture.

    Merci à vous pour votre aide en tout cas...

  10. #10
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Effectivement, sous Forms vous utilisez TEXT_IO...
    ... qui n'incorpore pas la fonction FFLUSH() !

    Damned !

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

Discussions similaires

  1. Supprimer une ligne entière avec condition?!
    Par ChicoXavier dans le forum Général Python
    Réponses: 2
    Dernier message: 08/04/2013, 19h53
  2. Copier/coller d'une ligne entière avec petits détails
    Par alexg33 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/07/2010, 16h00
  3. Réponses: 14
    Dernier message: 07/09/2007, 22h45
  4. [Débutant] génération d'un EJB avec GenIc
    Par Stessy dans le forum JOnAS
    Réponses: 65
    Dernier message: 31/01/2005, 10h50
  5. Génération de script SQL avec les données
    Par borgfabr dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 05/03/2004, 13h57

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