Re: Ayuda urgente con transacciones

From: Jaime Casanova <systemguards(at)gmail(dot)com>
To: Julio Rivero <jcrmlima(at)gmail(dot)com>
Cc: Conrado Blasetti <conrado(at)mapfre(dot)com(dot)ar>, July Campos <jcampos(at)interactivedata(dot)com(dot)ve>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Ayuda urgente con transacciones
Date: 2006-02-08 04:11:47
Message-ID: c2d9e70e0602072011k1aaa2ec1t4bc855130763efe3@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On 2/7/06, Julio Rivero <jcrmlima(at)gmail(dot)com> wrote:
> mmm... no me habia fijado, hasta el momento he utilizado el rollback con los
> exception y no me ha traido problemas... es cierto, el RAISE EXCEPTION
> aborta la función y por ende corta la transaccion (insert, update, delete,
> etc)...
>
> Gracias por la aclaración.
>
>
> On 2/7/06, Alvaro Herrera <alvherre(at)commandprompt(dot)com> wrote:
> >
> > Julio Rivero escribió:
> > > Sorry, no revise bien el codigo, tiene razón, el Begin va sin ";" y
> > siempre
> > > tiene que cerrarse con un end;
> > >
> > > el commit es automatico, si todo esta OK el postgres cierra la
> > transacción,
> > > de lo contrario le mandas el rollback;
> >
> > Veo que nadie probo lo que esta sugiriendo, o siquiera se molesto en
> > leer el manual de PL/pgSQL. La verdad es que es imposible ejecutar
> > ROLLBACK en PL/pgSQL.
> >
> > Lo que puedes hacer es usar RAISE EXCEPTION, lo cual abortara la
> > funcion automaticamente.
> >

hasta la version 7.4 esto es lo unico que se puede hacer

> > Observa que puedes usar un bloque
> >
> > BEGIN
> >
> > EXCEPTION
> >
> > END
> >
> > y entre el BEGIN y el EXCEPTION hacer un RAISE EXCEPTION, la cual sera
> > capturada y el control se le dara al bloque EXCEPTION, donde puedes
> > hacer un nuevo RAISE EXCEPTION si te place.
> >

hay que notar que esta ultima construccion, solo se puede usar desde
la version 8 en adelante...

incluso se puede usar varias construcciones BEGIN ... EXCEPTION

--- begin script sql ---

create table tt (col1 int not null primary key check (col1 > 0 and col1 < 100));

create function prueba() returns boolean as $$
begin
begin
insert into tt values (-1);
exception
when others then
end;
begin
insert into tt values (1000);
exception
when others then
end;
insert into tt select generate_series(1, 99);
return true;
end;
$$ language plpgsql;

--- end script sql ---

> > Por favor lee el manual de PL/pgSQL. Incluso hay una traduccion hecha
> > recientemente para la cual muchos de esta lista te pueden dar una URL.
> >

esta en www.postgresql.org.mx

o el actualizado (en ingles):
http://www.postgresql.org/docs/8.1/static/plpgsql-control-structures.html#PLPGSQL-ERROR-TRAPPING

--
Atentamente,
Jaime Casanova
(DBA: DataBase Aniquilator ;)

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Javier Aquino H. 2006-02-08 04:12:15 Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Fw:[pgsql-es-ayuda]Consulta sobre cómo armar estructura detablas
Previous Message Alvaro Herrera 2006-02-08 03:16:57 Re: Ayuda urgente con transacciones