RE: declarando una variable en funcion

From: Edwin Quijada <listas_quijada(at)hotmail(dot)com>
To: Roberto Rodríguez Pino <rodpin(at)gmail(dot)com>, <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: declarando una variable en funcion
Date: 2008-06-18 16:16:24
Message-ID: BLU137-W125EE6FC8163554D65D920E3AB0@phx.gbl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda


Sorry, con copia a la lista ahora
> Date: Wed, 18 Jun 2008 17:08:12 +0200
> From: rodpin(at)gmail(dot)com
> To: pgsql-es-ayuda(at)postgresql(dot)org
> Subject: [pgsql-es-ayuda] declarando una variable en funcion
>
> Hola a todos!
> Estoy tratando de escribir la siguiente funcion. Si bien no esta en
> pgsql (esta en sql) no logro dar el como declarar una variable.
>
> CREATE OR REPLACE FUNCTION ingresarcosto(_idproveedor integer,
> _idarticulo character varying, _costoultimo double precision, _fecha
> date, _cantidad integer) RETURNS integer AS
> DECLARE
> costoTemp int;
> $BODY$
> costoTemp:= select costoultimo from costo where idarticulo=$2 and flag=true;
> insert into costo (idproveedor, idarticulo, costoultimo, fecha, cantidad)
> values ($1, $2, $3, $4, $5);
> update costo set flag=false where idarticulo=$2;
> update costo set flag=true where idcosto=(select
> currval('costo_idcosto_seq')::int);
> select currval('costo_idcosto_seq')::int;
>
> $BODY$
> LANGUAGE 'sql' VOLATILE;
>
> Al cargarla, me reclama en la linea de DECLARE. Alguien me puede echar
> una mano, ya que no he logrado dar con el problema en si.
> Saludos!
> Roberto

Las funcions en SQL no admiten declarqciones ynada de eso. Solo te permiten el standard sql
Asi que cambia el lenguaje a plpgsql y eso debera resolverte el problema
A ver:

> CREATE OR REPLACE FUNCTION ingresarcosto(_idproveedor integer, _idarticulo character varying, _costoultimo double precision, _fecha
> date, _cantidad integer) RETURNS integer AS
$BODY$
> DECLARE
> costoTemp int; --uN COSTO ENTERO??
CUR integer;
> BEGIN
select INTO costoTemp costoultimo from costo where idarticulo=$2 and flag=true;
> insert into costo (idproveedor, idarticulo, costoultimo, fecha, cantidad)
> values ($1, $2, $3, $4, $5);
> update costo set flag=false where idarticulo=$2;
> update costo set flag=true where idcosto=(select currval('costo_idcosto_seq')::int);
select INTO CUR currval('costo_idcosto_seq')::int;
RETURN(CUR);
>
> $BODY$
> LANGUAGE 'PLPGsql' VOLATILE;

Creo que puedes darle un vistazo desde ahi aunq hay un par de cosas q no las veo logicas

*-------------------------------------------------------*
*-Edwin Quijada
*-Developer DataBase
*-JQ Microsistemas
*-809-849-8087

* " Si deseas lograr cosas excepcionales debes de hacer cosas fuera de lo comun"
*-------------------------------------------------------*

> --
> visita mi weblog!
> http://trasto.hopto.org
> Softwarelibre(at)diinf
> http://softwarelibre.diinf.usach.cl
> --
> TIP 4: No hagas 'kill -9' a postmaster

_________________________________________________________________
Stop squinting -- view your photos on your TV. Learn more.
http://www.microsoft.com/windows/digitallife/default.mspx?deepLink=photos

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Luis D. García 2008-06-18 16:18:44 Re: Replicación Centralizada con Slony
Previous Message Edwin Quijada 2008-06-18 16:07:20 Herramienta de auditoria