PostgreSQL9.1 trigger avec arguments

From: Martine AGUERA <martine(dot)aguera(at)laas(dot)fr>
To: pgsql-fr-generale(at)postgresql(dot)org
Subject: PostgreSQL9.1 trigger avec arguments
Date: 2012-11-29 16:06:50
Message-ID: 50B7881A.9000505@laas.fr
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-fr-generale

Bonjour,

Je bloque sur le passage d’arguments au niveau des Triggers.

J’ai plusieurs tables où je dois calculer la durée entre deux dates,
pour cela je souhaiterais créer une fonction trigger unique à toutes les
tables en passant en paramètre la date de début et la date de fin.

Ce qui est curieux c’est qu’on ne peut passer que des arguments de type
chaîne ?
J’ai donc converti les valeurs de type date en chaine de caractères
avant le passage des paramètres et fait l’opération inverse pour
calculer la durée.

Vous trouverez ci-dessous mon code et l’erreur générée.
Merci de votre aide
Martine

------------------------------------------
CREATE FUNCTION "public"."fct_calcul_duree"()
RETURNS TRIGGER
LANGUAGE plpgsql
VOLATILE
AS
$$
DECLARE
arg_date_debut varchar;
arg_date_fin varchar;

BEGIN
arg_date_debut := TG_ARGV[0];
arg_date_fin := TG_ARGV[1];

NEW.duree := to_date(arg_date_fin, 'YYYY-MM-DD') -
to_date(arg_date_debut, 'YYYY-MM-DD');

RETURN NEW;
END

$$
;CREATE TABLE "public"."t_projet"(
"projet_id" Serial NOT NULL,
"nom" Varchar NOT NULL,
"reference" Varchar NOT NULL,
"objectifs_scientifiques" Varchar,
"date_debut" Date NOT NULL,
"date_fin" Date,
"duree" Integer,
"observations" Varchar,
"test" Varchar,
CONSTRAINT "check_date" CHECK ((date_fin > date_debut))
)
WITH (OIDS=FALSE)

CREATE TRIGGER "trigger_calcul_duree"
BEFORE INSERT OR UPDATE OF date_debut, date_fin
ON "public"."t_projet" FOR EACH ROW
WHEN (NEW.date_fin is not null)
EXECUTE PROCEDURE
"public"."fct_calcul_duree"(to_char(NEW.date_debut,'YYYY-MM-DD'),
to_char(NEW.date_fin, 'YYYY-MM-DD'))
;

---------------------------
[WARNING ] CREATE TRIGGER "trigger_calcul_duree"
BEFORE INSERT OR UPDATE OF date_debut, date_fin
ON "public"."t_projet" FOR EACH ROW
WHEN (NEW.date_fin is not null)
EXECUTE PROCEDURE
"public"."fct_calcul_duree"(to_char(NEW.date_debut,'YYYY-MM-DD'),
to_char(NEW.date_fin, 'YYYY-MM-DD'))
ERREUR: erreur de syntaxe sur ou près de « ( »
LINE 5: ...CUTE PROCEDURE
"public"."fct_calcul_duree"(to_char(NEW.date_...
--------------------------------

Responses

Browse pgsql-fr-generale by date

  From Date Subject
Next Message François Figarola 2012-11-29 16:38:45 Re: PostgreSQL9.1 trigger avec arguments
Previous Message Martine AGUERA 2012-11-29 15:55:29 PostgreSQL9.1 PB trigger avec passage d'arguments