[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