Re: Noms de variable dynamiques

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.

In response to

Responses

Browse pgsql-fr-generale by date

  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