From: | Samuel ROZE <samuel(dot)roze(at)aliceadsl(dot)fr> |
---|---|
To: | Dimitri Fontaine <dfontaine(at)hi-media(dot)com> |
Cc: | Guillaume Lelarge <guillaume(at)lelarge(dot)info>, pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: Noms de variable dynamiques |
Date: | 2009-09-14 05:29:02 |
Message-ID: | 1252906142.11394.137.camel@samuel-laptop |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-fr-generale |
Postgres me sort une erreur lors de la création de la fonction si
j'utilise ce type de synthaxe:
Erreur SQL :
ERREUR: erreur de syntaxe sur ou près de « $2 »
LINE 1: SELECT ( $1 ::hits_brut). $2
^
QUERY: SELECT ( $1 ::hits_brut). $2
CONTEXT: SQL statement in PL/PgSQL function "hits_brut_trigger" near line 6
Dans l'instruction :
CREATE OR REPLACE FUNCTION shema.matable () RETURNS trigger AS $$
DECLARE
v_critere varchar(50);
BEGIN
v_critere := 'champ1';
RAISE NOTICE 'NEW.id = % ; v_critere = %', NEW.id, v_critere;
RAISE NOTICE 'NEW.v_critere = %', (NEW::matable).v_critere;
END;
$$ LANGUAGE plpgsql;
Le dimanche 13 septembre 2009 à 23:27 +0200, Dimitri Fontaine a écrit :
> Samuel ROZE <samuel(dot)roze(at)aliceadsl(dot)fr> writes:
>
> > Dans ce cas, est-ce possible d'accèder à un champ d'un RECORD en
> > utilisant des hacks du genre EXECUTE pour les requêtes ?
>
> SELECT (record).champ FROM mysrf(x) as record;
>
> Ça ça marche, mais ton soucis est que tu veux faire ça avec NEW et
> PostgreSQL ne sait pas sur quelle table tu vas mettre ton trigger, donc
> il ne sait pas ce qu'il y a dans NEW. Tu peux toujours transtyper pour
> qu'il sache de quoi tu parles, mais au runtime il faudra que le CAST
> soit réellement possible.
>
> c := (NEW::type).champ;
>
> Pour rappel toute table est égalemment un type de données.
From | Date | Subject | |
---|---|---|---|
Next Message | Dimitri Fontaine | 2009-09-14 07:16:12 | Re: Noms de variable dynamiques |
Previous Message | Daniel Verite | 2009-09-13 22:09:35 | Re: Noms de variable dynamiques |