[firebase-br] Trigger Universal - Um exemplo pratico

Francisco Carlos da Rocha Gomes fcarlos em cpafac.embrapa.br
Sex Set 9 12:21:12 -03 2005


Colegas,

Segue abaixo um exemplo de trigger universal que eu utilizo numa das 
minhas aplicacoes. Ele faz o seguinte: após (after) qualquer transacao 
na tabela CoordRegional ele soma os valores dos registros da FK 
CodCoordEst e grava-os na tabela da FK CoordEstadual.
Trata-se de um totalizador de dados da tabela CoordRegional 
(tabela-filho) para a tabela CoordEstadual (tabela-pai). E funciona bem.

Espero que eu tenha ajudado.

Um abraço a todos,

Francisco Carlos
Embrapa

-Se abaixo o código do trigger -------------------------

Set Term  !!
 ;
Create Trigger tgCoordRegAfter for CoordRegional
Active AFTER Insert or Update or Delete Position 0
As
Declare Variable vCodCoordEst Smallint;
Declare Variable vQtdCoordRegCad Smallint;
Declare Variable vQtdMunicipios Smallint;
Declare Variable vQtdEquipes Smallint;
begin
  if      (Inserting) then
    vCodCoordEst = new.CodCoordEst;
  else if (Updating) then
    vCodCoordEst = new.CodCoordEst;
  else if (Deleting) then
    vCodCoordEst = old.CodCoordEst;
  else  Exit;

  select Count(CodCoordEst), Sum(QtdMunicipios),
         Sum(QtdEquipesCad)
  from CoordRegional
  where CodCoordEst = :vCodCoordEst
  into :vQtdCoordRegCad, :vQtdMunicipios,
       :vQtdEquipes;

  if (vQtdMunicipios is null) then vQtdMunicipios = 0;
  if (vQtdCoordRegCad is null) then vQtdCoordRegCad = 0;
  if (vQtdEquipes is null) then vQtdEquipes = 0;

  update CoordEstadual
    set QtdMunicipios = :vQtdMunicipios,
        QtdCoordRegCad = :vQtdCoordRegCad,
        QtdEquipesCad = :vQtdEquipes
  where CodCoordEst = :vCodCoordEst;

end !!
Set Term ; !!

---------------------------------------------------------



Augusto escreveu:

> Valeu
>
>
> ----- Original Message ----- From: "Rafael Cabral" 
> <rafael.cabral em intercraft.inf.br>
> To: "'FireBase'" <lista em firebase.com.br>
> Sent: Friday, September 09, 2005 11:04 AM
> Subject: RES: [firebase-br] Trigger Universal
>
>
> Fala augusto.
>
> CREATE TRIGGER TRG_TABELA FOR TABELA
> BEFORE INSERT OR UPDATE OR DELETE
> AS
> BEGIN
> IF (INSERTING) THEN
> BEGIN
> --CÓDIGO QUANDO INSERE
> END
> IF (UPDATING) THEN
> BEGIN
> --CÓDIGO QUANDO ALTERA
> END
> IF (DELETING) THEN
> BEGIN
> --CÓDIGO QUANDO EXCLUI
> END
> END
> ^
>
> Espero ter ajudado.
>
> []s,
>
> Rafael Cabral
>
> -----Mensagem original-----
> De: lista-bounces em firebase.com.br 
> [mailto:lista-bounces em firebase.com.br] Em
> nome de Augusto
> Enviada em: sexta-feira, 9 de setembro de 2005 10:25
> Para: FireBase
> Assunto: [firebase-br] Trigger Universal
>
> Pessoal,
>
>
>  Alguem tem um exemplo de "trigger universal"
> que é executada tando para INSERT, UPDATE, DELETE e dentro dela decide 
> o que
> fazer???
>
> Augusto
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br Para 
> editar
> sua configuração na lista, use o endereço
> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> Para editar sua configuração na lista, use o endereço 
> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> Para editar sua configuração na lista, use o endereço 
> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>




Mais detalhes sobre a lista de discussão lista