Vous n'êtes pas identifié(e).
Pages : 1
Salut,
J'ai ces quelques lignes dans une fonction pour un trigger 'DELETE'
DECLARE
date_prix_initial date;
BEGIN
date_prix_initial = (SELECT MIN(spr_date_entree_en_vigueur) FROM TG_TABLE_NAME WHERE svc_id=OLD.svc_id);
j 'ai cette erreur :
SQLSTATE[42P01]: Undefined table: 7 ERROR: relation "tg_table_name" does not exist
1. Est-ce parce que TG_TABLE_NAME n'est pas visible depuis la requête?
2. Sans parenthèses autour du SELECT j'avais une erreur de syntaxe. Les parenthèses sont-elles requises?
Merci pour vos lumières.
Hors ligne
Une variable ou un paramètre ne peuvent être utilisé dans une requête statique que pour remplacer une valeur, pas un nom d'objet. Il faut donc passer par une requête dynamique.
Guillaume.
Hors ligne
Merci bien.
Pour ceux que cela intéresse, la page Instructions de base de la doc détaillant les commandes dynamiques.
J'ai abouti à
EXECUTE 'SELECT MIN(spr_date_entree_en_vigueur) FROM ' || TG_TABLE_SCHEMA || '.' || TG_TABLE_NAME || ' WHERE svc_id=$1' INTO date_prix_initial USING OLD.svc_id;
L'utilisation de EXECUTE est quelque peu contraignante au regard de mon objectif. Ma requête n'a rien de dynamique, je souhaitais seulement profiter des variables disponibles dans une fonction trigger. Maintenant je me dis qu'il est plus pertinent/efficace dans ce cas de saisir directement le nom de la table. Mais j'en sais un peu plus...
Hors ligne
Pages : 1