Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-fr-generale by date

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

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group