[firebase-br] RES: TRIGGER AFTER INSERT OR UPDATE no mesmo ficheiro

andre conrado acf.andre em gmail.com
Seg Ago 8 12:03:09 -03 2011


Pelo que entendi, os chamados SOCIOS podem adquirir pontos ao indicarem
novos SOCIOS e essa informação surge no momento do cadastro do novo sócios.
Se for isso, não entendo porque usar UPDATING já que um novo sócio não vai
ter usa indicação alterada. No máximo, se ele deixar de se sócios, e nesse
caso um flag que informe isto deveria ser verificado e ai sim um UPDATING
ser chamado.

A recursividade é uma boa ferramenta, mas deve-se ter muito cuidado sua sua
implementação pelos motivos já destacados pelos amigos.

abçs.

Em 8 de agosto de 2011 11:35, Felix <felix.sol em terra.com.br> escreveu:

> É impressão minha ou há uma referência circular na tua Trigger?
>
> Ela atualiza SOCIOS a cada INSERT/UPDATE em SOCIOS? Isso não vai
> enlouquecer
> o FB não? Pq a cada UPDATE -> dispara a Trigger -> que faz um novo Update
> ->
> que dispara a Trigger novamente -> ... e assim vai, sem nunca terminar?
>
> Fco. Felix
> Desenvolvimento de Sistemas
> www.soltecnologia.com.br
>
> -----Mensagem original-----
> De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br]
> Em
> nome de Mário Reis
> Enviada em: segunda-feira, 8 de agosto de 2011 11:22
> Para: lista em firebase.com.br
> Assunto: [firebase-br] TRIGGER AFTER INSERT OR UPDATE no mesmo ficheiro
>
> 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
>
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



-- 
Um Abraço,
André Conrado.

055 21 9176-7013 - Claro



Mais detalhes sobre a lista de discussão lista