Yo lo hice asi:

create or replace function ingresoPago(p_transp integer, p_fechax date, 
p_montoT integer, p_montoV integer,
p_montoP integer, p_estadox integer) returns integer as
$BODY$
DECLARE lv_viaje integer = 0;
begin
insert into pago_viajes(transportista, fecha,monto_total,monto_vales,
monto_pago, estado) values(p_transp, p_fechax,p_montoT,p_montoV, p_montoP,
p_estadox) returning idpago_viajes into lv_viaje;
return lv_viaje;
end;
$BODY$
language 'plpgsql';


Creo que esto aclara tu duda. No olvides que los parametros y las variables de 
la función, por revisión de codigo, deben tener un prefijo. Además para 
facilitar la modificación de la función, coloca "or replace" en la declaración 
de la función.




>________________________________
> De: Marco Vinicio Jimenez Rojas <vinici...@gmail.com>
>Para: Rodrigo Gonzalez <rjgonz...@estrads.com.ar> 
>CC: Alvaro Herrera <alvhe...@alvh.no-ip.org>; Alejandro Carrillo 
><faster...@yahoo.es>; Ayuda <pgsql-es-ayuda@postgresql.org> 
>Enviado: miércoles 7 de diciembre de 2011 17:31
>Asunto: Re: [pgsql-es-ayuda] error en funcion
> 
>
>ya logre resolver el asunto de la funcion haciendo unas correcciones en las 
>sugerencias que me dio alvaro y quitando esa asignacion. pero mi pregunta es. 
>si el insert asi como esta me devuelve el valor del seria con el returnig como 
>hago para capturarlo en una variable?
>
>
>
>insert into pago_viajes(transportista, fecha,monto_total,monto_vales,
>                     monto_pago, estado) values(transp, fecha,montoT,montoV, 
>montoP,
>                       estado)returning idpago_viajes;
>
>
>
>Dejo aqui la estructura de la tabla
>
>CREATE TABLE pago_viajes
>(
>  idpago_viajes serial NOT NULL,
>  transportista integer NOT NULL,
>  fecha date,
>  monto_total numeric,
>  monto_vales numeric,
>  monto_pago numeric,
>  estado integer,
>  CONSTRAINT pago_viajes_pkey PRIMARY KEY (idpago_viajes)
>)
>
>
>muestro aqui la funcion tal como esta y que si funciona pero no puedo campurar 
>el serial
>
>create function ingresoPago(transp integer, fechax date, montoT integer, 
>montoV integer,
>montoP integer, estadox integer) returns integer as
>$BODY$
>DECLARE viaje integer = 0;
>begin
>insert into pago_viajes(transportista, fecha,monto_total,monto_vales, 
>monto_pago, estado) values(transp, fechax,montoT,montoV, montoP, 
>estadox)returning idpago_viajes;
>
>return viaje;
>end;
>$BODY$
>language 'plpgsql';
>
>
>
>
>
>
>
>
>
>El 7 de diciembre de 2011 16:14, Rodrigo Gonzalez <rjgonz...@estrads.com.ar> 
>escribió:
>
>On 12/07/2011 06:53 PM, Alvaro Herrera wrote:
>>
>>Excerpts from Alejandro Carrillo's message of mié dic 07 18:23:47 -0300 2011:
>>>
>>>no debería ser:
>>>>
>>>>viaje := insert into pago_viajes(transportista, 
>>>>fecha,monto_total,monto_vales,
>>>>                     monto_pago, estado) values(transp, 
>>>>fecha,montoT,montoV, montoP,
>>>>                       estado)returning idpago_viajes;
>>>>
>>>>faltan los 2 puntos para la asignación del campo serial
>>>>
Tanto = como := sirven para la asignación en plpgsql.
>>>
>>>
Que yo sepa insert no devuelve...
>>
>>tenes que cambiar por
>>
>>
>>insert into pago_viajes(transportista, fecha,monto_total,monto_vales,
>>                    monto_pago, estado) values(transp, fecha,montoT,montoV, 
>>montoP,
>>
                      estado) returning idpago_viajes into viaje;
>>
>>O sea, usar into<variable>
>>
>>Saludos
>>
>>Rodrigo
>>
>>
>>
>
>
>-- 
>
>-----------------------
>MVJR
>
>
>

Responder a