Merci beaucoup, je vais mettre ça en place, le code sera un peu plus
clair :)
Merci !
Le dimanche 31 août 2008 à 19:22 +0200, Christophe Chauvet a écrit :
> Bonsoir
>
> Si vous vouliez reutiliser la variable que vous avez passer en argument
> a votre fonction, il aurait fallu la déclaré comme ceci
>
> CREATE OR REPLACE FUNCTION clients.contact (p_nom text, p_email text,
> inout p_t integer) RETURNS integer AS $contact$
>
> l'utilisation de INOUT permet de passer la variable en argument de la
> fonction, mais également de changer sa valeur pour la recupérer après le
> retour de la fonction
>
> ex schématique
>
> a = 5
>
> x = client.contact('toto', 'toto@toto.com', a)
>
> print a
> (dans votre exemple ici a vaudrait 1)
>
> OUT et INOUT sont disponible depuis PostgreSQL 8.1
>
> Cordialement,
>
> Christophe Chauvet.
>
> Samuel ROZE a écrit :
> > Re-Bonjour,
> >
> > Une erreur très bête et en fait, très explicite :
> >
> > C'était cette portion du code qui posait problème :
> >
> >
> >> IF (p_t != 0) THEN
> >> p_t := 1;
> >> END IF;
> >>
> >
> > En fait, la variable "p_t" est une constante donc je n'ai pas le droit
> > de la modifier, il faut donc que je passe par une autre variable.
> >
> > A bientôt.
> > Samuel.
> >
> > Le dimanche 31 août 2008 à 11:48 +0200, Samuel ROZE a écrit :
> >
> >> Bonjour à tous,
> >>
> >> J'ai crééer une fonction appelée "contact" dans ma base de données, qui,
> >> quand on l'appelle, renvoi l'ID du contact avec les noms et email donnés
> >> en paramètre. Si il n'y a pas de contact de ce nom/email, elle le créé
> >> et retourne à nouveau l'ID.
> >>
> >> Voici la structure de la table "contacts" :
> >> +-----------------+
> >> | contacts |
> >> +-----------------+
> >> | id SERIAL |
> >> | nom text |
> >> | email text |
> >> | actif integer |
> >> | maj timestamptz |
> >> | _trigger integer|
> >> +-----------------+
> >>
> >> Le dernier champ, "_trigger" sert à dire ou non si on veut que le
> >> trigger s'éxécute pour l'enregistrement.
> >>
> >> Maintenant, voici le code de ma fonction "contact" :
> >>
> >> -------------------------
> >> CREATE OR REPLACE FUNCTION clients.contact (p_nom text, p_email text,
> >> p_t integer) RETURNS integer AS $contact$
> >> DECLARE
> >> v_id integer DEFAULT 0;
> >> BEGIN
> >> IF (p_t != 0) THEN
> >> p_t := 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
> >> INSERT INTO clients.contacts (nom, email, _trigger) VALUES
> >> (p_nom, p_email, p_t);
> >> SELECT id INTO v_id FROM clients.contacts WHERE nom = p_nom AND
> >> email = p_email LIMIT 1;
> >> END IF;
> >> RETURN v_id;
> >> END;
> >> $contact$ language plpgsql;
> >> -------------------------
> >>
> >> Lorsque j'essaye de créer cette fonction, le compilateur plpgsql me sort
> >> cette erreur :
> >>
> >> -------------------------
> >> 5-clients-fonctions.sql:21: ERREUR: "$3" is declared CONSTANT
> >> CONTEXT: compile of PL/pgSQL function "contact" near line 10
> >> -------------------------
> >>
> >> La ligne 21 correspond à la ligne où il y as la requête "INSERT" dans la
> >> fonction "contact".
> >>
> >> Auriez-vous une idée sur le pourquoi de cette erreur ?
> >>
> >> Merci d'avance !
> >> Cordialement, Samuel ROZE.
> >>
> >>
> >>
> >
> >
> >
>
>
--
Sent via pgsql-fr-generale mailing list (pgsql-fr-generale@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-fr-generale
No comments:
Post a Comment