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 :

[pl/sql] Récupérer des données dans fichier


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    455
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 455
    Par défaut [pl/sql] Récupérer des données dans fichier
    Bonjour,

    j'ai la procédure suivante:

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    PROCEDURE recup_web IS
       ADRESSE VARCHAR2(255);
       LA_PAGE UTL_HTTP.HTML_PIECES;
       DEBUT NUMBER;
       FIN NUMBER;
       TRAVAIL VARCHAR2(4000);
       LIGNE VARCHAR2(2000);
       TYPE_FICHIER VARCHAR2(10);
       FICHIER UTL_FILE.FILE_TYPE;
       YDDD VARCHAR2(4);
       W_ROOT VARCHAR2(50);
    BEGIN
       W_ROOT :='/home/';
       SELECT TO_CHAR(SYSDATE,'YDDD') INTO YDDD FROM dual;
       ADRESSE:='http://www.toto.fr/questions/flux/questionnaire2.php4';
       LA_PAGE := UTL_HTTP.REQUEST_PIECES(ADRESSE);
       FICHIER:=UTL_FILE.FOPEN(W_ROOT,'QUEST_WEB'||YDDD||'.TXT','w');
         IF LA_PAGE.COUNT=1 
       THEN
                DEBUT:=1;
    		FIN:=0;
    		DEBUT:=INSTR(LA_PAGE(1),'<debut ',DEBUT);
    		WHILE debut<>0 LOOP
    		   FIN:=INSTR(LA_PAGE(1),'</fin>',DEBUT);
    		   LIGNE:=SUBSTR(LA_PAGE(1),debut+11,FIN-(DEBUT+11));
    		  TYPE_FICHIER:=SUBSTR(LA_PAGE(1),debut+7,3);
    		  IF TYPE_FICHIER='que' 
    		  	 THEN UTL_FILE.PUT_LINE(FICHIER,LIGNE); 
    		  END IF;
    		  DEBUT:=INSTR(LA_PAGE(1),'<debut ',FIN);
    		END LOOP;
       ELSE
    	   FOR I IN 1 .. LA_PAGE.COUNT-1
    	   LOOP
    	    TRAVAIL:= LA_PAGE(I) || LA_PAGE(I+1);
    	    DEBUT:=1;
    		FIN:=0;
    		DEBUT:=INSTR(TRAVAIL,'<debut ',DEBUT);
    		WHILE debut<>0 AND ((debut<2000 AND i< LA_PAGE.COUNT-1) OR i= LA_PAGE.COUNT-1) LOOP
    		  FIN:=INSTR(TRAVAIL,'</fin>',DEBUT);
    		  LIGNE:=SUBSTR(TRAVAIL,debut+11,FIN-(DEBUT+11));
    		  TYPE_FICHIER:=SUBSTR(LA_PAGE(i),debut+7,3);
    		  IF TYPE_FICHIER='que' 
    		  	 THEN UTL_FILE.PUT_LINE(FICHIER,LIGNE); 
    		  END IF;
    		  DEBUT:=INSTR(TRAVAIL,'<debut ',FIN);
    		END LOOP;
    	   END LOOP;
       END IF;
       	   UTL_FILE.FCLOSE(FICHIER);
       COMMIT;  
       END recup;
    Cette procédure permet de récupérer des informations via une page php qui génère des lignes, lignes correspondant à des données d'une base mysql .
    Voici à quoi ressemble le fichier que j'obtiens:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <debut que>0210125834510072006BB B21     V   D  E  F  GQ1 R I     BC  FB        M  N J                               00060DEAB</fin>
    <debut que>0210135024010072006DC B31      C               R I            ABC EFB        M                                    00100DEBB</fin>
    <debut que>0210138154510072006DDAB21      C               R I  J  z.Zt. bei           A C   B       H       Fit for Fan                   00050ECAB</fin>
    <debut que>0210031282110072006DD B42     V   D              I                  C  FA            E                                00050DBBB</fin>
    Mais à chaque fois je ne récupère pas toutes les données de base de données mysql.
    il me manque 3 4 lignes. Je pense que cela vient de ma procédure PL/SQL car quand je vais directement sur ma page PHP, je recupère bien toutes mes données.

    Cela fait plusieurs temps que j'essaye de voir d'où cela peut venir mais je ne trouve pas.
    Si quelqu'un pouvait m'aider ce serait très sympa.

  2. #2
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    455
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 455
    Par défaut
    Apparemment, il ne prendrait pasla prmière lignes et les dernières lignes.
    Peut être y a t'il un problème avec mes variables?

  3. #3
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    455
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 455
    Par défaut
    Cette procédure s'excute la nuit...
    je n'ai aucune donnée qui a été inséré dans le fichier QUEST.
    Pourtant j'ai des données dans ma base.
    Je ne comprends pas...

  4. #4
    Expert confirmé
    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
    Par défaut
    Il faut utiliser des traces pour comprendre. notament votre système de boucle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    FOR I IN 1 .. LA_PAGE.COUNT-1
     
      WHILE debut<>0 AND ((debut<2000 AND i< LA_PAGE.COUNT-1) OR i= LA_PAGE.COUNT-1) LOOP
     
        IF TYPE_FICHIER='que' 
    		  	 THEN UTL_FILE.PUT_LINE(FICHIER,LIGNE);

  5. #5
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    455
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 455
    Par défaut
    Citation Envoyé par SheikYerbouti
    Il faut utiliser des traces pour comprendre. notament votre système de boucle.
    Comment utilise t'on les traces?
    Hier j'ai parsemé ma procédure de DBMS_OUTPUT.PUT_LINE pour voir ce qu'elle faisait...
    Mais le sysètème de traces est peut être plus pratique?
    Cependant je ne l'ai jamais utilisé.

  6. #6
    Expert confirmé
    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
    Par défaut
    Oui, c'est ça. en parlant de trace je parlais effectivement de DBMS_OUTPUT.

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/06/2008, 10h52
  2. Réponses: 1
    Dernier message: 19/04/2008, 16h26
  3. Réponses: 1
    Dernier message: 05/09/2006, 17h56
  4. récupérer des données dans un fichier
    Par pymouse dans le forum Langage
    Réponses: 7
    Dernier message: 19/06/2006, 17h43
  5. Réponses: 2
    Dernier message: 16/01/2006, 19h34

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