Re: funciones plpgsql otra vez

From: Alvaro Herrera <alvherre(at)dcc(dot)uchile(dot)cl>
To: juan osorio <juan_osorio_ruiz(at)hotmail(dot)com>
Cc: juanky(dot)moral(at)gmail(dot)com, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: funciones plpgsql otra vez
Date: 2005-04-06 19:24:43
Message-ID: 20050406192443.GE9930@dcc.uchile.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola, entiendo poco la cochinada de abajo, pero creo que el problema es
que tienes que dar los valores para LIMIT y OFFSET fuera del string, de
manera que $1 y $2 sean expandidos por plpgsql antes de ejecutar la
consulta. O sea,

FOR tupla IN EXECUTE ''SELECT * FROM producto WHERE
vprod_st&lt;&gt;''||$4||'' ORDER BY ''||$3||''&nbsp; LIMIT '' || $1 ||
'' offset '' || $2

POR FAVOR no escribas en HTML. Muchas gracias.

On Wed, Apr 06, 2005 at 07:49:25AM +0000, juan osorio wrote:
> <html><div style='background-color:'><P>Holas, Si, nuevamente yo :(<BR><BR>La verdad es que esto de las comillas simples me están volviendo loco, ahora estoy intentando con otra función que es esta:</P>
> <P>CREATE OR REPLACE FUNCTION obtiene_productos(integer,integer,text,text) RETURNS SETOF RECORD AS '<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DECLARE<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tupla RECORD;</P>
> <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BEGIN<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FOR tupla IN EXECUTE ''SELECT * FROM producto WHERE vprod_st&lt;&gt;''||$4||'' ORDER BY ''||$3||''&nbsp; LIMIT $1 offset $2'' LOOP<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return next tupla;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END LOOP;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return tupla;</P>
> <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END;<BR>' language 'plpgsql';</P>
> <P>Al ejecutar la función de esta manera: obtiene_productos(20,40,'prod_nom','0') (suponiendo que el campo vprod_st es char(1) ) me sale este error:</P>
> <P>ERROR: ExecEvalParam: Unknown value for parameter (null) </P>
> <P>me parece que son las comillas el problema, estoy en lo cierto??? Muy agradecidos por la paciencia. Saludos <BR></P>
> <P>:(</P></div></html>

--
Alvaro Herrera (<alvherre[(at)]dcc(dot)uchile(dot)cl>)
Si no sabes adonde vas, es muy probable que acabes en otra parte.

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Edwin Quijada 2005-04-06 20:03:43 Pgdump sin GRANT
Previous Message Alvaro Herrera 2005-04-06 19:17:06 Re: Novato en Postgresql