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

Interfaces de programmation Oracle Discussion :

Ecrire le résultat d'une requête par blocs


Sujet :

Interfaces de programmation Oracle

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 31
    Points : 22
    Points
    22
    Par défaut Ecrire le résultat d'une requête par blocs
    bonjour,

    J'ecris le resultat d'une requete dans un fichier
    j'ai un curseur, un fetch_tab, ouvrir fichier, ecris_fichier

    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
    int dec_cur()
    {
         char sOrdre[4000] ;
     
         VARCHAR          SqlOrdre[4000] ;
     
         EXEC SQL WHENEVER SQLERROR GOTO erreurdec;
     
         sprintf (sOrdre, "SELECT * FROM matable);
     
         printf ("ordre sql %s \n", sOrdre) ; 
     
         S_TO_V ( &SqlOrdre, sOrdre) ;
         EXEC SQL PREPARE REQ_ZCOM FROM :SqlOrdre ;
         EXEC SQL DECLARE C1 CURSOR FOR REQ_ZCOM ;
         EXEC SQL OPEN C1;
     
         return(0);
     
     erreurdec:
         erreur_ORACLE("1 Erreur dans la declaration de curseur");
         exit(c_iERRPROC);
     
    }
    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
    int fetch_tab()
    {
      EXEC SQL WHENEVER SQLERROR GOTO erreurfet;
     
      EXEC SQL WHENEVER NOTFOUND GOTO fintrt;
     
     
      memset ((char*)&struct_resultat,0,sizeof(struct_resultat)) ;
     
      if (!fin_tab)
        {
          /* lecture d un enregistrement de la table */
     
          EXEC SQL FETCH C1 INTO
    	:struct_resultat.nom,
    	:struct_resultat.prenom,           
    	:struct_resultat.adr,
    	:struct_resultat.age,
    	:struct_resultat.sexe,
    	:struct_resultat.nblivre;
          return sqlca.sqlerrd[2];
     
        }
      else
        {
          return sqlca.sqlerrd[2];
        }
     
     
    fintrt:
            printf ("Fichier crée\n");
    	fin_tab=1;
    	return sqlca.sqlerrd[2];
     
    erreurfet:
            printf ("Erreur fetch\n");
    	exit(c_iERRPROC);
    	return sqlca.sqlerrd[2];
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void ecris_fichier(FILE* fichier)
    {
     
      fprintf(fichier,"%s;%s;%s;%d;%s;%d\n",
              SupprimerBlancsFinChaine(struct_resultat.nom),
              SupprimerBlancsFinChaine(struct_resultat.prenom),           
              SupprimerBlancsFinChaine(struct_resultat.adr),
              struct_resultat.age,
              SupprimerBlancsFinChaine(struct_resultat.sexe),
              struct_resultat.nblivre);
    }
    un extrait de mon main
    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
    /* ============================= */
    	/*Ouverture du fichier de sortie*/ 
    	/* ============================= */
    	fichier = ouvre_fichier(NomFichier,"w");
    	printf("\n Création du fichier\n");
     
    	while (fin_tab==0) 
    	{
    		nb_elt=fetch_tab();
    	        printf("\n nb_elt->%d \n",nb_elt);
     
    		if(!fin_tab)
    		{
    			ecris_fichier(fichier);
    		}
    		(struct_resultat));
    	}
    	fclose(fichier); 
    }
    avant mon main

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    typedef struct   
    { 
      char nom[3 +1];
      char prenom[3 + 1];
      char adr[4 + 1];
      int age;
      char sexe[1 + 1];
      int nblivre;
    }t_struct_resultat;
     
    static t_struct_resultat struct_resultat;
    EXEC SQL INCLUDE sqlca;
    le fichier ce creer bien lorsqu'il y a peu de données a ecrire, mais quand il y' en a bcp plus ça ne marche plu.

    d'apres ce que j'ai vu nb_elt n'est pas tjs =1

    j'en deduis qu'il n'ecris pas ligne a ligne (comme je le pensais) mais bloc par bloc.

    je ne sais pas ecrire des blocs de données. (j'ai vu la notion de buffer mais je ne vois pas comment l'appliquer).

    Merci

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 593
    Points
    41 593
    Par défaut
    Vu que c'est du Pro*C, je pense que tu auras plus de chance sur le forum consacré à Oracle que sur celui consacré au C.

    Car pour te répondre, être un gourou du C ne suffit pas: Il faut plus de connaissances sur Oracle...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 31
    Points : 22
    Points
    22
    Par défaut
    ok merci

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 16/08/2012, 13h33
  2. Réponses: 5
    Dernier message: 06/10/2011, 18h15
  3. Filtrer les résultats d'une requête par date courte
    Par Herwin78800 dans le forum Linq
    Réponses: 8
    Dernier message: 11/08/2011, 16h16
  4. Sélectionner les résultats d'une requête par date
    Par 0sef40 dans le forum Langage SQL
    Réponses: 16
    Dernier message: 19/05/2011, 09h38
  5. [MySQL] Afficher les résultats d'une requête par nombre de caractères
    Par goldenb dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 01/08/2010, 02h01

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