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

Requêtes PostgreSQL Discussion :

Appel de procédure stockée dans un fichier de SQL embarqué (ecpg)


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre habitué Avatar de GDMINFO
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 350
    Points : 160
    Points
    160
    Par défaut Appel de procédure stockée dans un fichier de SQL embarqué (ecpg)
    Bonjour,

    j'ai réalisé et testé une procédure en pl/pgsql.
    Je voudrais l'appeler au sein d'un programme écrit en C et pré-compilé avec ecpg.

    Pour l'instant je fais comme ceci :

    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
     
    ...
    EXEC SQL BEGIN DECLARE SECTION;
    const char* requeteAFaire = "SELECT maFonction(?);";
    char parametre[20];
    char resultat[50];
    EXEC SQL END DECLARE SECTION;
     
    // CONNEXION A LA BASE
     
    // APPEL
    printf("Valeur du paramètre ?)\n");
    scanf("%s",parametre);
     
    EXEC SQL PREPARE requeteO FROM :requeteAFaire;
    EXEC SQL DECLARE curseur CURSOR FOR requeteO;
     
    EXEC SQL WHENEVER NOT FOUND DO BREAK;
    EXEC SQL OPEN curseur USING :parametre;
     
    while (1) 
    	{
    	EXEC SQL FETCH curseur INTO :enregistrement; 
     	printf("%s\n",enregistrement);
    	}
    EXEC SQL CLOSE curseur;
    EXEC SQL COMMIT;
    EXEC SQL DEALLOCATE PREPARE requeteO;
    ...
    Ce qui est troublant c'est que si je met la valeur du paramètre dans la requeteAFaire et en enlevant le USING dans l'ouverture du curseur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    const char* requeteAFaire = "SELECT maFonction('ma chaine');";
    Ca fonctionne.....

    Je ne trouve nul part de l'information sur ce genre d'appel, pouvez-vous m'aider ?

    Merci,

  2. #2
    Membre habitué Avatar de GDMINFO
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 350
    Points : 160
    Points
    160
    Par défaut
    J'ai oublié de dire quel était le problème, en fait je n'ai pas de message d'erreur, il ne s'affiche rien du tout...

  3. #3
    Membre habitué Avatar de GDMINFO
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 350
    Points : 160
    Points
    160
    Par défaut
    Bon.... je cherche depuis hier mais je viens de trouver.
    C'est très bête, scanf coupe la chaine dès le premier espace.....

    Merci quand même.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 01/04/2009, 15h20
  2. appeler une procédure stockée dans une base mysql
    Par mennou dans le forum Hibernate
    Réponses: 4
    Dernier message: 16/06/2008, 01h58
  3. Réponses: 2
    Dernier message: 18/01/2008, 11h59
  4. [PEAR][DB] Appel de procédure stockée dans différents schémas sous postgresql
    Par rebolon dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 22/09/2006, 16h49
  5. Réponses: 3
    Dernier message: 17/01/2006, 17h12

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