cuando se incrementa un campo serial en insert

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

Responses

Browse pgsql-es-ayuda by date

  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