Gat$ http://www.wowteamfinder.com | 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
J'espère que c'est possible...
Merci d'avance ---------------
Recherche de partenaires pvp dans World of Warcraft :: http://www.wowteamfinder.com
|