Re: nextval dans une fonction plpgsql ?

From: Guillaume Lelarge <guillaume(at)lelarge(dot)info>
To: pgsql-fr-generale(at)postgresql(dot)org
Cc: Samuel ROZE <samuel(dot)roze(at)aliceadsl(dot)fr>
Subject: Re: nextval dans une fonction plpgsql ?
Date: 2009-09-13 14:09:29
Message-ID: 200909131609.29467.guillaume@lelarge.info
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-fr-generale

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.

--
Guillaume.
http://www.postgresqlfr.org
http://dalibo.com

In response to

Responses

Browse pgsql-fr-generale by date

  From Date Subject
Next Message Samuel ROZE 2009-09-13 14:19:32 Re: nextval dans une fonction plpgsql ?
Previous Message Samuel ROZE 2009-09-13 14:05:06 Re: nextval dans une fonction plpgsql ?