From: | Joac <jgarcil(at)hotmail(dot)com> |
---|---|
To: | <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | cuando se incrementa un campo serial en insert |
Date: | 2010-03-16 11:22:55 |
Message-ID: | COL118-W4606794375D2022E317F54B72D0@phx.gbl |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Buenas a todos,
Al utilizar un trigger (disparador) antes de introducir un registro a la tabla (que tiene como clave primaria un campo serial) se hace una serie de comprobaciones de otra tabla, si la introducción de datos es correcta se inserta el registro a la tabla en caso contrario dá un error y no se inserta el nuevo registro. Pero al dar el error el autoincremento se actualiza como si se ubiese introducido un registro en la tabla. Lo que me gustaría saber es cuando se incrementa este campo para cuando dé un error el disparador no se incremente dicho campo. Aunque en la documentacion indica que cuando se utiliza RAISE EXCEPTION se aborta la transacción, es cierto no se inserta el registro en la tabla, pero si que se incrementa el campo serial. Dejo la función disparadora para mayor compresión.
Saludos,
Joac
CREATE OR REPLACE FUNCTION "restaStock_tri"() RETURNS "trigger" AS '
--*
--* To insert in this point the description of the procedure
--*
DECLARE
conta entrada.entsto%TYPE;
BEGIN
-- Modificar el campo entrada Stock con las salidas que vayan produciendose.
Select entsto into conta from entrada where entpar=new.entpar;
IF conta = 0 THEN
RAISE EXCEPTION ''No se puede registrar la salida ya que no hay stock'';
END IF;
IF new.salcan > conta THEN
RAISE EXCEPTION ''No se puede registrar la salida ya que la cantidad selecciona es mayor a la que hay en stock'';
ELSE
conta := conta - new.salcan;
update entrada SET entsto = conta where entpar=new.entpar;
END IF;
RETURN NEW;
END;
' LANGUAGE plpgsql;
CREATE TRIGGER "modStock" BEFORE INSERT ON "salida" FOR EACH ROW EXECUTE PROCEDURE "restaStock_tri"();
_________________________________________________________________
¿Te gustaría tener Hotmail en tu móvil Movistar? ¡Es gratis!
http://serviciosmoviles.es.msn.com/hotmail/movistar-particulares.aspx
From | Date | Subject | |
---|---|---|---|
Next Message | Oswaldo Hernández | 2010-03-16 11:54:53 | Sobre pg_advisory_locks |
Previous Message | Petru Ghita | 2010-03-16 07:34:03 | Re: Ambientes de Desarrollo para versiones de PostgreSQL-8.4 y para 9.0alpha4 |