Re: ERROR: missing ".." at end of SQL expression

From: "Lucas" <lucas(at)movi(dot)com(dot)ar>
To: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: ERROR: missing ".." at end of SQL expression
Date: 2004-05-17 15:22:12
Message-ID: 00ad01c43c22$ba5231c0$0b00a8c0@lucas
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

el tema es que si hago un subselect, tendría que hacer un subselect para
cada campo que me retorna FUNCION2...
para este caso en particular lo solucioné reemplazando
"declare enteros setof integer" por "declare enteros tabla1"
y
"select * from FUNCION2(enteros)" por "select * from
FUNCION2(enteros.campo)"

... pero resulta que justamente ahora estoy trabajando sobre otra función
muy similar, y me da el mismo error.... la diferencia
es que en este caso, directamente me viene el vector de enteros como
parametro....

declare param alias for $1; --es un vector de integer
declare resultado setof my_type;
begin
for i in param
loop
for resultado in
select * from FUNCION( i ) --funcion retorna un tipo
my_type (composite type)
loop
return next resultado;
end loop;
end loop;
return;
end;

probé definiendo i como setof integer, tambien probé definiendola como
integer[]... sin éxito...
por lo que veo, no es posible usar la sentencia FOR IN, utilizando setof
integer ni vectores de integers....
la solución alternativa que yo encontré a este problema en particular es
recorrer el vector de integer
con una sentencia while....
pero me interesa saber si es un problema que el lenguaje no lo soporta o si
estoy cometiendo un error yo al codificar....

----- Original Message -----
From: "Alvaro Herrera" <alvherre(at)dcc(dot)uchile(dot)cl>
To: "Lucas" <lucas(at)movi(dot)com(dot)ar>
Cc: <pgsql-es-ayuda(at)postgresql(dot)org>
Sent: Friday, May 14, 2004 8:35 PM
Subject: Re: [pgsql-es-ayuda] ERROR: missing ".." at end of SQL expression

> On Fri, May 14, 2004 at 04:29:10PM -0300, Lucas wrote:
>
> > CREATE OR REPLACE FUNCTION "public"."function" (integer) RETURNS SETOF
> > "public"."my_type" AS'
> > declare param alias for $1;
> > declare resultado setof my_type;
> > declare enteros setof integer;
> > begin
> > for enteros in
> > select campo_id from TABLA1 where campo1 = param --traigo todos
los
> > IDs que cumplan con cierta condicion
> > loop
> > for RESULTADO in
> > select * from FUNCION2(enteros) --retorna my_type
> > loop
> > return next RESULTADO;
> > end loop;
> > end loop;
> > return;
> > end;
> > 'LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY DEFINER;
>
> Has tratado de convertir esto en un subselect? No estoy seguro pero
> parece buen candidato ...
>
> --
> Alvaro Herrera (<alvherre[a]dcc.uchile.cl>)
> "No hay ausente sin culpa ni presente sin disculpa" (Prov. francés)
>
> ---------------------------(end of broadcast)---------------------------
> TIP 9: el optimizador ignorará el uso de recorridos de índice si los
> tipos de datos de las columnas no coinciden
>

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Manuel Sugawara 2004-05-17 15:24:38 Re: Problemas para encriptar datos
Previous Message Jose Luis Torres 2004-05-17 14:55:37 Error desconocido