El mar, 16-02-2010 a las 11:31 -0600, Jorge Jacques escribió:
> 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.
> 

No se puede.

-- 
Saludos,
Gilberto Castillo
Edificio Beijing. Miramar Trade Center. Etecsa.
Miramar, La Haban.Cuba.
--- 
This message was processed by Kaspersky Mail Gateway 5.6.28/RELEASE running at 
host imx2.etecsa.cu
Visit our web-site: <http://www.kaspersky.com>, <http://www.viruslist.com>
--
TIP 7: no olvides aumentar la configuración del "free space map"

Responder a