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