[firebase-br] TRIGGER AFTER INSERT OR UPDATE no mesmo ficheiro
Mário Reis
mariodosreyx em gmail.com
Seg Ago 8 11:21:56 -03 2011
Caros Amigos,
A partir do momento que implementei esta Trigger, comocei, lá de quando em vez
a receber um "Alerta de CPU" C/actividade anormal do Firebird(2.5).
A ideia é simples o Prop1_ID (Proponente) tem direito a acumular pontos para
cada novo sócio que faça.
A trigguer pretende automatizar esse acumular quer em INSERT quer em UPDATE.
Alguém pode me dizer o que tem de mal a minha
CREATE TRIGGER SOCIOS_BIU_QTS FOR SOCIOS
ACTIVE AFTER INSERT OR UPDATE
POSITION 2
AS
DECLARE VARIABLE QTY INTEGER;
DECLARE VARIABLE WSOC_ID INTEGER;
BEGIN
/* Se criando Novo Registo */
IF (INSERTING) THEN
BEGIN
SELECT S0.QTS_ID FROM SOCIOS S0
WHERE S0.NOSOC_ID=NEW.PROP1_ID INTO :QTY ;
UPDATE SOCIOS S1
SET S1.QTS_ID=:QTY+1
WHERE S1.NOSOC_ID=NEW.PROP1_ID;
-- AND S1.DIRECTOR='N';
END
/* Se actualizando Registo Existente */
IF (UPDATING) THEN
-- Velho Proponente != Novo
IF (OLD.PROP1_ID!=NEW.PROP1_ID) THEN
BEGIN
-- 1.º Tira -1 ao Velho
SELECT S0.QTS_ID FROM SOCIOS S0
WHERE S0.NOSOC_ID=OLD.PROP1_ID INTO :QTY ;
IF (:QTY>0) THEN
BEGIN
UPDATE SOCIOS S1
SET S1.QTS_ID=:QTY-1
WHERE S1.NOSOC_ID=OLD.PROP1_ID ;
-- AND S1.DIRECTOR='N';
END
--2.º Acresce um ao Novo
SELECT S0.QTS_ID FROM SOCIOS S0
WHERE S0.NOSOC_ID=NEW.PROP1_ID INTO :QTY ;
IF (:QTY>0) THEN
BEGIN
UPDATE SOCIOS S1
SET S1.QTS_ID=(:QTY + 1)
WHERE S1.NOSOC_ID=NEW.PROP1_ID ;
-- AND S1.DIRECTOR='N';
END
END
END
Mais detalhes sobre a lista de discussão lista