Lists: | pgsql-fr-generale |
---|
From: | Samuel ROZE <samuel(dot)roze(at)aliceadsl(dot)fr> |
---|---|
To: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | RETURN cannot have a parameter in function with OUT parameters |
Date: | 2008-09-02 11:40:22 |
Message-ID: | 1220355622.7881.1.camel@samuel-laptop |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
Bonjour à tous,
Toujours dans mon fonction "contact" de la dernière fois, PostgreSQL me
sort une erreur bizare avec une simple fonction plpgsql...
"5-clients-fonctions.sql:36: ERREUR: RETURN cannot have a parameter in
function with OUT parameters sur ou près de « v_id » at character 1486"
Je ne comprend vraiment pas qu'est-ce qu'il ce passe... Pouvez-vous
m'aider ? Ci-dessous la fonction concernée.
-----------------------
CREATE OR REPLACE FUNCTION clients.contact (p_nom text, p_email text,
inout TRIGGER integer) RETURNS integer AS $contact$
DECLARE
v_id integer DEFAULT 0;
BEGIN
IF (TRIGGER != 0) THEN
TRIGGER := 1;
END IF;
SELECT id INTO v_id FROM clients.contacts WHERE nom = p_nom AND
email = p_email LIMIT 1;
IF NOT FOUND THEN
-- Le couple nom/email n'as pas été trouvé. Cependant, est-ce
que l'adresse mail
-- existe déjà et est acceptée ?
PERFORM id FROM clients.contacts WHERE email = p_email AND actif
= 1;
IF FOUND THEN
TRIGGER := 0;
END IF;
INSERT INTO clients.contacts (nom, email, _trigger) VALUES
(p_nom, p_email, TRIGGER) RETURNING id INTO v_id;
IF (v_trigger = 0) THEN
-- Si on as choisi de pas faire éxécuter les triggers, mais
que l'on passe par ce trigger
-- c'est que le choix à été automatique dans 99% des cas.
-- Par conséquent, ça veux dire que l'adresse mail existe
déjà et est déjà activée.
-- On va donc pas chercher à envoyer un mail au contact pour
qu'il active son mail mais
-- pour valider l'ajout de l'adresse mail. Pour ça, on va
éxécuter un script PHP
-- similaire à celui de l'action du mail (même fichier PHP,
mais pas même action)
PERFORM clients."php-maj-contact"(v_id, 'nv', p_nom,
p_email);
-- nv = Nouveau
END IF;
END IF;
RETURN v_id;
END;
$contact$ language plpgsql;
-----------------------
From: | Guillaume Lelarge <guillaume(at)lelarge(dot)info> |
---|---|
To: | Samuel ROZE <samuel(dot)roze(at)aliceadsl(dot)fr> |
Cc: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: RETURN cannot have a parameter in function with OUT parameters |
Date: | 2008-09-02 11:52:48 |
Message-ID: | 48BD2910.5000904@lelarge.info |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
Samuel ROZE a écrit :
> Bonjour à tous,
>
> Toujours dans mon fonction "contact" de la dernière fois, PostgreSQL me
> sort une erreur bizare avec une simple fonction plpgsql...
>
> "5-clients-fonctions.sql:36: ERREUR: RETURN cannot have a parameter in
> function with OUT parameters sur ou près de « v_id » at character 1486"
>
> Je ne comprend vraiment pas qu'est-ce qu'il ce passe... Pouvez-vous
> m'aider ? Ci-dessous la fonction concernée.
>
> -----------------------
> CREATE OR REPLACE FUNCTION clients.contact (p_nom text, p_email text,
> inout TRIGGER integer) RETURNS integer AS $contact$
Tu déclares ta fonction comme renvoyant un integer, non pas grâce à la
clause returns, mais avec le mode inout du paramètre trigger (fort
mauvais nom pour une variable car trigger est un mot clé réservé).
> [...]
> RETURN v_id;
Du coup, ici, tu ne dois pas avoir
RETURN une_variable;
mais
RETURN;
et la valeur actuelle de la variable TRIGGER sera renvoyée.
Bref, vu ton code (et surtout vu ce que tu veux renvoyer), je pense que
le mode inout est à supprimer.
--
Guillaume.
http://www.postgresqlfr.org
http://dalibo.com
From: | Samuel ROZE <samuel(dot)roze(at)aliceadsl(dot)fr> |
---|---|
To: | Guillaume Lelarge <guillaume(at)lelarge(dot)info> |
Cc: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: RETURN cannot have a parameter in function with OUT parameters |
Date: | 2008-09-02 11:54:51 |
Message-ID: | 1220356491.7881.3.camel@samuel-laptop |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
Le mode "inout" m'as été conseillé enfin du moins m'as été proposer dans
cette même liste de discussion...
C'est donc une mauvaise idée ? Je vais revenir à l'ancienne méthode :)
Merci.
Le mardi 02 septembre 2008 à 13:52 +0200, Guillaume Lelarge a écrit :
> Samuel ROZE a écrit :
> > Bonjour à tous,
> >
> > Toujours dans mon fonction "contact" de la dernière fois, PostgreSQL me
> > sort une erreur bizare avec une simple fonction plpgsql...
> >
> > "5-clients-fonctions.sql:36: ERREUR: RETURN cannot have a parameter in
> > function with OUT parameters sur ou près de « v_id » at character 1486"
> >
> > Je ne comprend vraiment pas qu'est-ce qu'il ce passe... Pouvez-vous
> > m'aider ? Ci-dessous la fonction concernée.
> >
> > -----------------------
> > CREATE OR REPLACE FUNCTION clients.contact (p_nom text, p_email text,
> > inout TRIGGER integer) RETURNS integer AS $contact$
>
> Tu déclares ta fonction comme renvoyant un integer, non pas grâce à la
> clause returns, mais avec le mode inout du paramètre trigger (fort
> mauvais nom pour une variable car trigger est un mot clé réservé).
>
> > [...]
> > RETURN v_id;
>
> Du coup, ici, tu ne dois pas avoir
>
> RETURN une_variable;
>
> mais
>
> RETURN;
>
> et la valeur actuelle de la variable TRIGGER sera renvoyée.
>
> Bref, vu ton code (et surtout vu ce que tu veux renvoyer), je pense que
> le mode inout est à supprimer.
>
>
From: | Guillaume Lelarge <guillaume(at)lelarge(dot)info> |
---|---|
To: | Samuel ROZE <samuel(dot)roze(at)aliceadsl(dot)fr> |
Cc: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: RETURN cannot have a parameter in function with OUT parameters |
Date: | 2008-09-02 11:57:52 |
Message-ID: | 48BD2A40.5060801@lelarge.info |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
Samuel ROZE a écrit :
> Le mode "inout" m'as été conseillé enfin du moins m'as été proposer dans
> cette même liste de discussion...
>
> C'est donc une mauvaise idée ? Je vais revenir à l'ancienne méthode :)
>
C'est pas forcément une mauvaise idée. Là, dans ce cas, je ne vois pas
l'intérêt.
--
Guillaume.
http://www.postgresqlfr.org
http://dalibo.com
From: | Christophe Chauvet <christophe(at)kryskool(dot)org> |
---|---|
To: | Samuel ROZE <samuel(dot)roze(at)aliceadsl(dot)fr> |
Cc: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: RETURN cannot have a parameter in function with OUT parameters |
Date: | 2008-09-02 12:24:28 |
Message-ID: | 48BD307C.3050405@kryskool.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
Bonjour
Samuel ROZE a écrit :
> Le mode "inout" m'as été conseillé enfin du moins m'as été proposer dans
> cette même liste de discussion...
>
> C'est donc une mauvaise idée ? Je vais revenir à l'ancienne méthode :)
>
> Merci.
>
Voila comment je combine RETURN et INOUT, INOUT je m'en sert pour
alimenter mes variables, quand a RETURN, sa valeur je m'en sert pour
information si le traitement de la fonction s'est bien passé.
Donc dans mon cas 2 utilisations différentes,
Cordialement,
Christophe Chauvet
From: | Guillaume Lelarge <guillaume(at)lelarge(dot)info> |
---|---|
To: | christophe(at)kryskool(dot)org |
Cc: | Samuel ROZE <samuel(dot)roze(at)aliceadsl(dot)fr>, pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: RETURN cannot have a parameter in function with OUT parameters |
Date: | 2008-09-02 12:37:56 |
Message-ID: | 48BD33A4.2090507@lelarge.info |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
Christophe Chauvet a écrit :
> [...]
> Samuel ROZE a écrit :
>> Le mode "inout" m'as été conseillé enfin du moins m'as été proposer dans
>> cette même liste de discussion...
>>
>> C'est donc une mauvaise idée ? Je vais revenir à l'ancienne méthode :)
>> Merci.
>>
>
> Voila comment je combine RETURN et INOUT, INOUT je m'en sert pour
> alimenter mes variables, quand a RETURN, sa valeur je m'en sert pour
> information si le traitement de la fonction s'est bien passé.
>
> Donc dans mon cas 2 utilisations différentes,
>
Quelle version de PostgreSQL ?
Tu peux nous montrer ta fonction ?
Parce que, moi, en 8.3.3, j'ai ceci:
glmf=# create or replace function f (inout p1 integer) returns integer
glmf-# language plpgsql
glmf-# as $$
glmf$# begin
glmf$# return 2;
glmf$# end;
glmf$# $$;
ERREUR: RETURN cannot have a parameter in function with OUT parameters
sur ou près de « 2 »
LIGNE 5 : return 2;
--
Guillaume.
http://www.postgresqlfr.org
http://dalibo.com
From: | Christophe Chauvet <christophe(at)kryskool(dot)org> |
---|---|
To: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: RETURN cannot have a parameter in function with OUT parameters |
Date: | 2008-09-02 14:07:57 |
Message-ID: | 48BD48BD.5000905@kryskool.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
Guillaume Lelarge a écrit :
> Quelle version de PostgreSQL ?
> Tu peux nous montrer ta fonction ?
>
Autant pour moi, c'est sous Oracle que c'est possible :( ,
effectivement PostgreSQL ne gère pas cette possibilité.
Christophe.
P.S. j'avais oublié de mettre la liste en copie :)
From: | Guillaume Lelarge <guillaume(at)lelarge(dot)info> |
---|---|
To: | christophe(at)kryskool(dot)org |
Cc: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: RETURN cannot have a parameter in function with OUT parameters |
Date: | 2008-09-02 14:20:48 |
Message-ID: | 48BD4BC0.9020901@lelarge.info |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
Christophe Chauvet a écrit :
> Guillaume Lelarge a écrit :
>> Quelle version de PostgreSQL ?
>> Tu peux nous montrer ta fonction ?
>>
> Autant pour moi, c'est sous Oracle que c'est possible :( ,
> effectivement PostgreSQL ne gère pas cette possibilité.
>
Pour une fois que c'est à mon avantage de ne pas connaître Oracle :)
--
Guillaume.
http://www.postgresqlfr.org
http://dalibo.com