En un procedimiento llamado desde el nivel superior o en un bloque de código anónimo
(comando DO) llamado desde el nivel superior, es posible
controlar transacciones. Para confirmar la transacción actual, llama al
comando commit. Para revertir la transacción actual,
llama al comando rollback. (Ten en cuenta que no es posible
ejecutar los comandos SQL COMMIT o
ROLLBACK a través de spi_exec o similar.
Debe hacerse utilizando estas funciones). Después de que finaliza una transacción,
se inicia automáticamente una nueva transacción, por lo que no hay un comando
separado para ello.
Aquí tienes un ejemplo:
CREATE PROCEDURE transaction_test1()
LANGUAGE pltcl
AS $$
for {set i 0} {$i < 10} {incr i} {
spi_exec "INSERT INTO test1 (a) VALUES ($i)"
if {$i % 2 == 0} {
commit
} else {
rollback
}
}
$$;
CALL transaction_test1();
Las transacciones no se pueden finalizar cuando una subtransacción explícita está activa.