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
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 ? |