Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/12/2007, 16h10   #1
Invité régulier
 
Inscription : novembre 2005
Messages : 11
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 11
Points : 6
Points : 6
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 :
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 :
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 !
sebdz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2007, 16h42   #2
Membre actif
 
Avatar de budtucker
 
Développeur multimédia
Inscription : avril 2007
Messages : 175
Détails du profil
Informations professionnelles :
Activité : Développeur multimédia

Informations forums :
Inscription : avril 2007
Messages : 175
Points : 174
Points : 174
Code :
EXECUTE 'SELECT hstore_field->'''||mrow.nom_de_mon_champ||'''' INTO temp_attribute_value;
__________________
Mohammed MEHIRA
budtucker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2007, 16h49   #3
Invité régulier
 
Inscription : novembre 2005
Messages : 11
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 11
Points : 6
Points : 6
Salut,

Dans ce cas, il ne reconnait pas le hstore_field (sui est une variable de ma procédure).
sebdz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2007, 17h01   #4
Invité régulier
 
Inscription : novembre 2005
Messages : 11
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 11
Points : 6
Points : 6
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...
sebdz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2007, 17h38   #5
Membre actif
 
Avatar de budtucker
 
Développeur multimédia
Inscription : avril 2007
Messages : 175
Détails du profil
Informations professionnelles :
Activité : Développeur multimédia

Informations forums :
Inscription : avril 2007
Messages : 175
Points : 174
Points : 174
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 :
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 :
1
2
  mavaleur := 'param_name';
  EXECUTE 'SELECT hstore_field->''' || mavaleur  || ''';' INTO mavariable;
__________________
Mohammed MEHIRA
budtucker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2008, 17h13   #6
Invité régulier
 
Inscription : novembre 2005
Messages : 11
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 11
Points : 6
Points : 6
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...
sebdz est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h56.


 
 
 
 
Partenaires

Hébergement Web