Vous n'êtes pas identifié(e).
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
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
Merci pour cette piste.
Je regarde si je m'en sors.
A.
Hors ligne