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

Re: Tableau dans une requête

From: Guillaume Lelarge <guillaume(at)lelarge(dot)info>
To: Samuel ROZE <samuel(dot)roze(at)aliceadsl(dot)fr>
Cc: pgsql-fr-generale(at)postgresql(dot)org
Subject: Re: Tableau dans une requête
Date: 2009-09-13 17:07:56
Message-ID: 200909131907.56203.guillaume@lelarge.info (view raw or flat)
Thread:
Lists: pgsql-fr-generale
Le dimanche 13 septembre 2009 à 18:49:40, Samuel ROZE a écrit :
> ERREUR:  erreur de syntaxe sur ou près de « $1 »
> LINE 1: ... FROM graphiques.critere WHERE lib_critere = ANY  $1  GROUP ...
>                                                              ^
> QUERY:  SELECT id_couple_critere , count(*) FROM graphiques.critere WHERE
>  lib_critere = ANY  $1  GROUP BY id_couple_critere HAVING count(*) =
>  array_upper( $1 , 1) CONTEXT:  SQL statement in PL/PgSQL function
>  "getcouplecriteresid" near line 11
> 
> Il semblerait que ça ne marche pas... Je vais me pencher sur
>  array_to_string, qui me semble être une bien bonne solution.
> 
> Le dimanche 13 septembre 2009 à 18:44 +0200, Guillaume Lelarge a écrit :
> > Le dimanche 13 septembre 2009 à 18:22:48, Samuel ROZE a écrit :
> > > [...]
> > > CREATE OR REPLACE FUNCTION graphiques.getCoupleCriteresId ( v_criteres
> > > varchar(50)[]) ) RETURNS integer AS $$
> > > DECLARE
> > >     v_id_couple integer;
> > > BEGIN
> > >     SELECT id_couple_critere , count(*) INTO v_id_couple
> > >         FROM graphiques.critere
> > >         WHERE lib_critere IN ANY 'v_criteres'::varchar(50)[]
> > >         GROUP BY id_couple_critere
> > >         HAVING count(*) = array_upper(v_criteres, 1);
> > >
> > >     RETURN v_id_couple;
> > > END;
> > > $$ LANGUAGE plpgsql;
> > >
> > > J'ai une erreur lorsque je créé la fonction:
> > >
> > > ERREUR:  erreur de syntaxe sur ou près de « ANY »
> > > LINE 1: ...t(*) FROM graphiques.critere WHERE lib_critere IN ANY
> > > 'v_cri... ^ QUERY:  SELECT id_couple_critere , count(*) FROM
> > > graphiques.critere WHERE lib_critere IN ANY 'v_criteres'::varchar(50)[]
> > > GROUP BY id_couple_critere HAVING count(*) = array_upper( $1 , 1)
> > > CONTEXT:  SQL statement in PL/PgSQL function "getcouplecriteresid" near
> > > line 8
> > >
> > > Comment puis-je passer ce tableau dans une requête ?
> >
> > Le problème n'est pas dans le paramètre, mais dans la requête du
> > count(*). À première vue, je dirais qu'on ne fait pas un IN ANY mais un =
> > ANY.
> 

Je maintiens pour le « = ANY », mais je n'avais pas vu le guillemet pour la 
variable, ce qui inévitablement pose problème. Il faut virer les guillemets 
simples au début et à la fin de v_criteres dans la requête.


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

In response to

Responses

pgsql-fr-generale by date

Next:From: Samuel ROZEDate: 2009-09-13 17:12:26
Subject: Re: Tableau dans une requête
Previous:From: Samuel ROZEDate: 2009-09-13 16:58:26
Subject: Re: Tableau dans une requête

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