Re: como comenzar bloque de transaccion

From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Victor Lopez <v(dot)lopez(dot)s(at)ono(dot)com>
Cc: Hensa <hensa22(at)yahoo(dot)es>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: como comenzar bloque de transaccion
Date: 2006-10-15 18:18:58
Message-ID: 20061015181858.GB8053@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Victor Lopez escribió:
> > No puedes, toda la funcion se ejecuta dentro de una sola transaccion.
> >
> > Lo que puedes usar es EXCEPTION, lo cual define un savepoint interno a
> > la funcion. Lee la documentacion al respecto.
> >
> > --
> > Alvaro Herrera http://www.CommandPrompt.com/
> > The PostgreSQL Company - Command Prompt, Inc.
>
> Entonces ...
>
> BEGIN -> COMMIT | ROLLBACK ????
>
> Solo para SQL ????
>
> En PL/SQL lo utlizabamos dentro de la función

Dentro de PL/pgSQL, BEGIN no tiene el mismo significado que fuera. En
PL/pgSQL, BEGIN indica el comienzo de un bloque de codigo, no de una
transaccion.

Para verificar, trata de usar START en lugar de BEGIN. En SQL, START y
BEGIN son sinonimos, pero en PL/pgSQL son diferentes.

COMMIT es lo mismo tanto dentro como fuera de PL/pgSQL, es decir,
termino de transaccion (lo cual no es soportado dentro de PL/pgSQL), por
lo que ves el error de SPI_ERROR_TRANSACTION (que es lo mismo que veras
con START).

Esto no esta limitado a PL/pgSQL, sino a todos los lenguajes
procedurales. Por eso tampoco puedes hacer BEGIN o COMMIT en una
funcion PL/Perl, por ejemplo.

--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jorge A. Barzola Rosadio 2006-10-15 19:04:09 Nuevo en PostgreSQL
Previous Message arturo garcia 2006-10-15 18:15:20 RE: Recomendar libros de PostgreSQL