From: | Miguel Rodríguez Penabad <penabad(at)gmail(dot)com> |
---|---|
To: | "Br(at)nsh" <bransh(at)gmail(dot)com> |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: sobre transacciones... |
Date: | 2008-01-14 12:11:36 |
Message-ID: | 95335e4e0801140411v201fd891i3f021f4b9404fd90@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Aunque creo que estás haciendo cosas raras (no por querer borrar la
provincia que quede sin localidades), la respuesta es usar bloques
anidados begin..end (o begin ... exception ... end) en tu función.
Por ejemplo: Tienes una tabla a
CREATE TABLE A (A INT PRIMARY KEY);
y la siguiente función, que intenta insertar un 1 veces.
CREATE OR REPLACE FUNCTION tonta() RETURNS void AS $BODY$
begin
insert into a values(1);
begin
insert into a values(1);
exception
when others then null;
end;
end
$BODY$ LANGUAGE plpgsql;
Evidentemente la segunda inserción produce un error de clave primaria
duplicada, pero al estar en un bloque begin.. exception.. end anidado,
hace el rollback PARCIAL (sólo el bloque interno), con lo que el
primer insert funciona.
From | Date | Subject | |
---|---|---|---|
Next Message | Gustavo | 2008-01-14 12:55:11 | Re: Manejo de strings en consulta |
Previous Message | Oswaldo Hernández | 2008-01-14 12:07:58 | Re: sobre transacciones... |