PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 25/07/2014 21:55:12

pyd001
Membre

TG_TABLE_NAME Undefined table

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

#2 25/07/2014 22:34:03

gleu
Administrateur

Re : TG_TABLE_NAME Undefined table

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

#3 26/07/2014 02:27:39

pyd001
Membre

Re : TG_TABLE_NAME Undefined table

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

Pied de page des forums