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

PostgreSQL Discussion :

[PL/PGSQL] création function dynamique, utilisation hstore


Sujet :

PostgreSQL

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 11
    Par défaut [PL/PGSQL] création function dynamique, utilisation hstore
    Bonjour,

    J'utilise dans une procédure, le type hstore (http://www.sai.msu.su/~megera/postgr.../README.hstore).

    Je récupère la valeur d'un champ hstore dans un premier temps
    Je veux ensuite récupérer une valeur associé a une clé.

    La procédure pour ce faire est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT hstore_field->'param_name'
    Jusqu'a la aucun problème.
    Seulement j'ai besoin de récupérer des champs dynamiquement, c'est a dire, que le nom de la variable 'param_name' est un champ que je récupère en base. Et la ca coince.

    Pour ce faire, j'ai effectué plusieurs tests :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    EXECUTE 'SELECT ''hstore''->'''||mrow.nom_de_mon_champ||'''' INTO temp_attribute_value;
    Dans ce cas, j'ai l'erreur: Unexpectd end of string, alors qu'a l'arrivée, j'ai une requete de la forme SELECT 'hstore'->'mon_champ', qui d'après moi est correct syntaxiquement.

    Et lorsque j'enleve les '' autour de hstore, il ne reconnait pas hstore.

    Bref je tourne en rond

    Si quelqu'un a un début de solution, je suis preneur

    Merci !

  2. #2
    Membre expérimenté Avatar de budtucker
    Profil pro
    Développeur multimédia
    Inscrit en
    Avril 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Avril 2007
    Messages : 176
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXECUTE 'SELECT hstore_field->'''||mrow.nom_de_mon_champ||'''' INTO temp_attribute_value;

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 11
    Par défaut
    Salut,

    Dans ce cas, il ne reconnait pas le hstore_field (sui est une variable de ma procédure).

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 11
    Par défaut
    Arf, je pense que je suis parto dans le mauvais sens, EXECUTE ne permet apparemment pas de faire des opération sur des vairables locales à la procédure...

  5. #5
    Membre expérimenté Avatar de budtucker
    Profil pro
    Développeur multimédia
    Inscrit en
    Avril 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Avril 2007
    Messages : 176
    Par défaut
    C'est bizarre, normalement ça marche. Par contre, Il me semble (je ne suis pas sûr) que EXECUTE doit être dans une fonction.

    Je l'avais utilisé en plpgsql sous la forme suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sql = ' INSERT INTO matable (monchamps) VALUES ('''|| idtechno ||''') returning mon id';
     
    EXECUTE sql into mavariablelocale;
    Par contre, la valeur qui est renvoyée est forcément une valeur unique, pas une suite d'occurrence. Est ce ton cas ?

    Je ne connais pas hstore. Par contre, normalement ça marche partout pareil. Ce qui est lancé dans le EXECUTE est la même chose si tu l'avais lancé en ligne SQL normale.

    Si je reprends ton premier code, au format EXECUTE ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      mavaleur := 'param_name';
      EXECUTE 'SELECT hstore_field->''' || mavaleur  || ''';' INTO mavariable;

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 11
    Par défaut
    Salut,

    Merci de ta réponse :-)
    Malheureusement, ca ne marchait toujours pas.
    J'ai fini par contourner le problème en utilisant une autre méthode, en éxécutant une requete plus lourde, mais qui est bien comprise par l'analyseur syntaxique.

    Ca doit être la forme de la requete spécifique pour le hstore qui ne lui plaisait pas...

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/11/2014, 09h44
  2. Réponses: 3
    Dernier message: 01/01/2009, 04h18
  3. Réponses: 1
    Dernier message: 24/11/2006, 16h36
  4. Création DLL pour utilisation sur VBA
    Par Fbartolo dans le forum C++Builder
    Réponses: 1
    Dernier message: 21/11/2005, 20h44

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