Skip site navigation (1) Skip section navigation (2)

Re: [pgsql-es-ayuda] Ayuda Manejo de transacciones e?==?ISO-8859-1?Q?n una función.

From: Jorge Garcia <jorgeenriqueg(at)gmail(dot)com>
To: Jaime Casanova <jaime(at)2ndquadrant(dot)com>
Cc: ecpug(at)postgresql(dot)org, pgsql-es-ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: [pgsql-es-ayuda] Ayuda Manejo de transacciones e?==?ISO-8859-1?Q?n una función.
Date: 2012-09-19 21:17:41
Message-ID: CABS6n2a7pr0J3bvb9Zys4mNiGjhD4VA7XBmC1n5nmin=QHqy4g@mail.gmail.com (view raw or flat)
Thread:
Lists: ecpugpgsql-es-ayuda
He estado intentando con el savepoint pero no lo he conseguido hacer
funcionar lo que tengo es algo así
un cursor y anidado otro cursor, dentro de las instrucciones del cursor
interno se hacen updates o inserts y quiero que esos no se han
transaccionales. Utilizo el savapoint y caputuro la exception
pero siempre se  va por la excepcion y no sale nunca del cursor.

El código que tengo hace mas o menos algo así:

CREATE OR REPLACE FUNCTION calculo()
  RETURNS text AS
$BODY$

DECLARE
   cursor_a RECORD;
   cursor_b RECORD;

BEGIN
       FOR cursor_a IN SELECT a,b,c from tabla_a
          LOOP
     FOR cursor_b IN  SELECT select d,e,r from tabla_b
   LOOP
    BEGIN
                    IF(cursor_a.a=cursor_b.d)
                               THEN
               BEGIN
 --- calculos, procesamiento y updates
SAVEPOINT my_savepoint;
 -- capturo la exception pero siempre se genera y nunca sale del cursor
                   END;
                 END IF;

       END LOOP;
        END LOOP;

return 'Finalizado';
END;
$BODY$
  LANGUAGE plpgsql VOLATILE STRICT;
ALTER FUNCTION calculo()
  OWNER TO postgres;


Gracias, Nuevamente.

Att
Jorge García.

2012/9/19 Jaime Casanova <jaime(at)2ndquadrant(dot)com>

> 2012/9/19 Jorge Garcia <jorgeenriqueg(at)gmail(dot)com>:
> >
> > Tengo una función que realiza cálculos a unos 80 mil registros los
> registros
> > los recorro en un cursor y se hace calculo registro por registro y quiero
> > que no se haga commit al final de todo el procesamiento si no que se haga
> > commit por cada registro procesado y saber si se proceso o hubo algún
> error.
> > como puedo hacer eso?? de antemano gracias por la ayuda que me puedan
> dar.
> >
>
> Saludos,
>
> Estamos hablando de una función almacenada aquí? Si es así, toda la
> función ocurre dentro de la misma transacción que invoco a la función,
> si no había una transacción abierta la función abre una transacción
> automáticamente al iniciar y la cierra con COMMIT al terminar o con
> ROLLBACK si algún error ocurrió.
>
> Si no quieres que no poder procesar un registro termine todo lo
> avanzado puedes usar SAVEPOINT para atrapar el error y evitar que la
> función termine.
>
> --
> Jaime Casanova         www.2ndQuadrant.com
> Professional PostgreSQL: Soporte 24x7 y capacitación
>

In response to

ecpug by date

Next:From: Alejandro CarrilloDate: 2012-09-19 21:36:33
Subject: Re: [pgsql-es-ayuda] RE: [pgsql-es-ayuda] Ayuda Manejo de transacciones en una función.
Previous:From: Milton LabandaDate: 2012-09-19 21:14:32
Subject: Re: Actualizacion PGDay Ecuador 2012

pgsql-es-ayuda by date

Next:From: Jorge Alberto Aquino AndradeDate: 2012-09-19 21:18:54
Subject: Rendimiento
Previous:From: Edwin QuijadaDate: 2012-09-19 18:02:07
Subject: RE: [pgsql-es-ayuda] Ayuda Manejo de transacciones en una función.

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group