Hola, buen día

Estoy intentando usar transacciones en una función:

CREATE OR REPLACE FUNCTION "public"."fx_hacer_entrada_por_concepto" (in int4, in float8, in int4) RETURNS bool AS
$BODY$
DECLARE
   id_usuario ALIAS FOR $1;
   id_concepto ALIAS FOR $3;
   cant ALIAS FOR $2;
   id_caja INT;
   id_ticket INT;
BEGIN SAVEPOINT rescate;
   id_caja := nextval('caja_caja_id_seq'::regclass);
id_ticket := nextval('entradas_por_concepto_entrada_por_concepto_id_seq'::regclass); INSERT INTO caja VALUES (id_caja, id_ticket, cant, true);
   IF NOT FOUND THEN
       ROLLBACK TO rescate;
       RETURN FALSE;
   END IF;
   INSERT INTO entradas_por_concepto VALUES (id_ticket, id_concepto);
INSERT INTO transacciones (transaccion_id, caja_id, usuario_id, tipo_de_transaccion_id, registro_id, fecha_hora) VALUES (DEFAULT, id_caja, id_usuario, 2, id_ticket, CURRENT_TIMESTAMP);
   COMMIT;
   RETURN TRUE;
END
$BODY$
LANGUAGE 'plpgsql'

Pero al llamarla:
select fx_hacer_entrada_por_concepto(1, 10000, 1);

Obtengo un error:
>[Error] Script lines: 1-3 --------------------------
ERROR: SPI_execute_plan failed executing query "SAVEPOINT rescate": SPI_ERROR_TRANSACTION
Line: 1 

Alguna idea? Desde ya muchas gracias.


Saluos!
--
TIP 1: para suscribirte y desuscribirte, visita 
http://archives.postgresql.org/pgsql-es-ayuda

Responder a