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

#1 21/03/2017 14:51:42

annesig
Membre

Fonction qui exploite TG_TABLE_SCHEMA & TG_TABLE_NAME

Bonjour,

J'ai une base de données pour laquelle toutes les tables métiers dispose d'un même champ "datemaj" (pour date de la dernière mise à jour).
Je souhaite mettre en place une fonction qui me permettrait grâce à un trigger de mettre ce champ à jour automatiquement.

Je pensais :
- créer une fonction générique qui met à jour le champ "datemaj" de la table qui a déclenché la fonction avec une fonction "current_date"
- créer un trigger pour chq table qui lance cette fonction après un INSERT ou un UPDATE FOR tous les champs sauf "datemaj"

Pour les triggers pas de soucis

Pour la fonction, je rencontre un problème.

J'ai écrit :

CREATE OR REPLACE FUNCTION metier.mafonction()
  RETURNS trigger AS
$BODY$
DECLARE
identifiant INTEGER;
BEGIN 
identifiant := NEW.objectid;
IF (TG_OP = 'UPDATE') THEN
UPDATE TG_TABLE_SCHEMA.TG_TABLE_NAME
SET datemaj = current_date
WHERE objectid = identifiant;
RETURN NEW;
ELSIF (TG_OP = 'INSERT') THEN
UPDATE TG_TABLE_SCHEMA.TG_TABLE_NAME
SET datemaj = current_date
WHERE objectid = identifiant;
RETURN NEW;
ELSE
RAISE WARNING '[metier.mafonction] - Other action occurred: %, at %', TG_OP,now();
RETURN NULL;
END IF;
END;
$BODY$

Et lorsque j'effectue une modification dans la table, j'obtiens le message d'erreur suivant :

TG_TABLE_SCHEMA.TG_TABLE_NAME n'existe pas

Merci d'avance pour votre aide :-)
Anne

Hors ligne

#2 21/03/2017 22:21:18

gleu
Administrateur

Re : Fonction qui exploite TG_TABLE_SCHEMA & TG_TABLE_NAME

Vous ne pouvez pas utiliser une requête statique. Vous devez passer par une requête dynamique, voir http://docs.postgresql.fr/9.6/plpgsql-s … cuting-dyn pour les détails.


Guillaume.

Hors ligne

#3 21/03/2017 23:14:29

annesig
Membre

Re : Fonction qui exploite TG_TABLE_SCHEMA & TG_TABLE_NAME

Merci pour cette piste.
Je regarde si je m'en sors.
A.

Hors ligne

Pied de page des forums