[POSTGRESQL] Fct plpgsql - Nom de champ modifiable, marche pas. pq? :(
Fct plpgsql - Nom de champ modifiable, marche pas. pq? :( [POSTGRESQL] - SQL/NoSQL - Programmation
MarshPosté le 27-09-2005 à 20:46:20
Salut
j'essaie de creer une fonction pour me faciliter la vie en pl/pgsql. En fait cette fonction recoit un identifiant d'une table quelconque (type integer), et un nom de table (varchar). Cette fonction teste si l'id donné existe dans la table donnée.
Pour ce faire il faut recuperer le nom du champ qui est une clé primaire. Jusque la pas de problème. Mais ca se corse lorsque je veux insérer ce nom de champ qui est VARIABLE dans la requete suivante. Ca passe pas.
Voila la définition de ma fonction :
Code :
/*
Verifie l'existence de la clé primaire passée en argument pour la table donnée
*/
DECLARE
v_id alias for $1;
v_table alias for $2;
v_enr record;
v_enr2 record;
BEGIN
-- Retourne le nom de la clé primaire de la table
SELECT
SUBSTR(
indexdef,
STRPOS(indexdef, '(')+1,
STRPOS(indexdef, ')') - STRPOS(indexdef, '(')-1
) AS nom_cle
INTO v_enr
FROM
pg_indexes
WHERE
tablename=v_table AND
SUBSTR(indexdef, 8, 6)='UNIQUE';
-- Traitement
IF LENGTH(v_enr.nom_cle) > 0 THEN
-- index trouvé, on vérifie que l'id existe dans la table
SELECT COUNT(*) AS nb INTO v_enr2 FROM v_table WHERE v_enr.nom_cle=v_id;
IF LENGTH(v_enr2.nb) > 0 THEN
-- id trouvé
RETURN TRUE;
ELSE
-- id non trouvé
RETURN FALSE;
END IF;
ELSE
-- index non-trouvé
RETURN FALSE;
END IF;
END;
Ca merde a la ligne 31 :
SELECT COUNT(*) AS nb INTO v_enr2 FROM v_table WHERE v_enr.nom_cle=v_id;
Ce qui est en gras ne passe pas.
Alors ma question est :
Comment faire pour rendre cette requête valide ? Il faudrait juste que "v_enr.nom_cle" soit interprété comme une partie de la requete... Mais apres des heures de recherche je ne trouve pas
Marsh Posté le 27-09-2005 à 20:46:20
Salut
j'essaie de creer une fonction pour me faciliter la vie en pl/pgsql.
En fait cette fonction recoit un identifiant d'une table quelconque (type integer), et un nom de table (varchar).
Cette fonction teste si l'id donné existe dans la table donnée.
Pour ce faire il faut recuperer le nom du champ qui est une clé primaire. Jusque la pas de problème. Mais ca se corse lorsque je veux insérer ce nom de champ qui est VARIABLE dans la requete suivante. Ca passe pas.
Voila la définition de ma fonction :
Ca merde a la ligne 31 :
SELECT COUNT(*) AS nb INTO v_enr2 FROM v_table WHERE v_enr.nom_cle=v_id;
Ce qui est en gras ne passe pas.
Alors ma question est :
Comment faire pour rendre cette requête valide ? Il faudrait juste que "v_enr.nom_cle" soit interprété comme une partie de la requete...
Mais apres des heures de recherche je ne trouve pas
J'espère que c'est possible...
Merci d'avance
---------------
Recherche de partenaires pvp dans World of Warcraft :: http://www.wowteamfinder.com