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 > > >