Re: ejecutar una consulta creada

From: Alvaro Herrera <alvherre(at)surnet(dot)cl>
To: Julio Rivero <jcrmlima(at)gmail(dot)com>
Cc: Jairo Martín Miguel <jairo010(at)hotmail(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: ejecutar una consulta creada
Date: 2005-05-25 19:57:27
Message-ID: 20050525195727.GA9316@surnet.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On Wed, May 25, 2005 at 02:12:10PM -0500, Julio Rivero wrote:
> En tu misma funcion puedes hacer EXEC 'script_sql'

No es EXEC sino EXECUTE; y no puedes simplemente asignar el resultado y
retornar eso, sino que necesitas un FOR EXECUTE <string>; LOOP RETURN
NEXT <foo>; END LOOP; (o algo semejante). Pero de todas maneras yo
haria lo siguiente:

> On 5/25/05, Jairo Martín Miguel <jairo010(at)hotmail(dot)com> wrote:

> > declare
> >
> > seccion alias for $1; -- Parámetro que indica la sección por la que se
> > filtrará.
> > resultado text; -- String donde se construye la solución.
> >
> > begin
> >
> > resultado := 'SELECT OK_PERSONAS.nombre, DW_EDT.programa, DW_HORAS.horas
> > FROM OK_PERSONAS INNER JOIN (DW_HORAS INNER JOIN DW_EDT ON
> > DW_HORAS.programa=DW_EDT.programa) ON OK_PERSONAS.persona=DW_HORAS.persona
> > WHERE (OK_PERSONAS.seccion=''' || seccion || ''');';
>
> -- aqui
> EXEC resultado;
>
> return resultado;
> > end;

create function foo(text) returns setof <tipo> language sql as '
select ... WHERE ok_personas.seccion = $1';

Mucho mas sencillo y te evitas invocar plpgsql donde realmente es
innecesario.

--
Alvaro Herrera (<alvherre[a]surnet.cl>)
"La experiencia nos dice que el hombre peló millones de veces las patatas,
pero era forzoso admitir la posibilidad de que en un caso entre millones,
las patatas pelarían al hombre" (Ijon Tichy)

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Mario Soto Cordones - Venezuela 2005-05-25 20:24:28 Re: tipos de datos
Previous Message Ariel Romero 2005-05-25 19:49:46 Sobre php y postgres