Re: nextval dans une fonction plpgsql ?

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: nextval dans une fonction plpgsql ?
Date: 2009-09-13 14:19:32
Message-ID: 1252851572.11394.44.camel@samuel-laptop
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-fr-generale

C'est plutôt une bonne idée... En fait, la variable me servait dans la
condition suivante... Mais il ne me sert pas en réalité. C'est mieux
comme ça, merci :-)

Aussi, pour être sûr, tant qu'on y est, après ma boucle, j'ai une
condition, "IF v_liste_criteres IS NULL THEN". Cette condition a pour
but d'être vraie quand les données demandées par la boucle
("graphiques.getCriteres()" actuellement, mais plus tard une vue) sont
vides. i.e. la vue ne retourne rien. Est-ce bien le cas ?

Merci !

PS: Great de chez great l'article de Linux Magasine ! Chapeau !

Le dimanche 13 septembre 2009 à 16:09 +0200, Guillaume Lelarge a écrit :
> Le dimanche 13 septembre 2009 à 15:34:16, Samuel ROZE a écrit :
> > Bonjour à tous,
> >
> > Je suis en train de développer une fonction Pl/PgSQL mais je n'arrive
> > pas à accèder à la valeur suivante d'une séquence... Voici l'erreur:
> >
> > Erreur SQL :
> >
> >
> > ERREUR: erreur de syntaxe sur ou près de « $1 »
> > LINE 1: ...graphiques.critere_id_couple_crite_seq'::regclass) INT0 $1
> > ^
> > QUERY: SELECT nextval FROM
> > nextval('graphiques.critere_id_couple_crite_seq'::regclass) INT0 $1
> > CONTEXT: SQL statement in PL/PgSQL function "addcritere" near line 7
> >
> > Dans l'instruction :
> >
> >
> > CREATE OR REPLACE FUNCTION graphiques.addCritere ( v_lib_critere
> > varchar(50) ) RETURNS void AS $$ DECLARE
> > v_id_couple_critere integer;
> > v_liste_criteres graphiques.critere%rowtype;
> > BEGIN
> >
> > FOR v_liste_criteres IN SELECT * FROM graphiques.getCriteres() LOOP
> > SELECT nextval FROM
> > nextval('graphiques.critere_id_couple_crite_seq'::regclass) INT0
> > v_id_couple_critere;
>
> Ce serait plutôt :
>
> SELECT nextval('graphiques.critere_id_couple_crite_seq'::regclass)
> INTO v_id_couple_critere;
>
> Voire même :
>
> v_id_couple_critere :=
> nextval('graphiques.critere_id_couple_crite_seq'::regclass);
>
> > INSERT INTO critere (id_couple_critere, lib_critere)
> > VALUES (v_id_couple_critere, v_lib_critere); END LOOP;
> > IF v_liste_criteres IS NULL THEN
> > INSERT INTO critere (id_couple_critere, lib_critere) VALUES (0,
> > v_lib_critere); END IF;
> >
> > RETURN;
> > END;
> > $$ LANGUAGE plpgsql;
> >
> > Pouvez-vous m'aider ?
> >
>
> Mais en fait, pourquoi ne pas faire plutôt :
>
> FOR v_liste_criteres IN SELECT * FROM graphiques.getCriteres() LOOP
> INSERT INTO critere (id_couple_critere, lib_critere) VALUES
> (nextval('graphiques.critere_id_couple_crite_seq'::regclass),
> v_lib_critere);
> END LOOP;
>
> Ce serait plus simple.
>
>

In response to

Responses

Browse pgsql-fr-generale by date

  From Date Subject
Next Message Guillaume Lelarge 2009-09-13 14:31:36 Re: nextval dans une fonction plpgsql ?
Previous Message Guillaume Lelarge 2009-09-13 14:09:29 Re: nextval dans une fonction plpgsql ?