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