[firebase-br] Cantu, TRIGGER funciona!!!

Pha-Lista lista em pha.com.br
Seg Maio 16 09:11:15 -03 2005


Eu acho que nas triggers voce nao deveria utilzar informacoes da tabela Pai, nao sei exatamente como o FB faz as exclusoes, mais pelo jeito nao se tem acesso aos dados da tabela Pai.

O FB utiliza uma transacao especial para fazer a Integridade Referencial, pode ser por isso, que nao se tem acesso as tabela Pai.

PHA
Nova Odessa / SP - Brazil

-----Mensagem original-----
From: "Eliomar" eliomar em promediconet.com.br
Date: Mon, 16 May 2005 09:04:10 -0300
To: "Carlos H. Cantu" listas em warmboot.com.br
Subject: [firebase-br] Cantu, TRIGGER funciona!!!

> Esses dias eu postei uma mensagem dizendo que as
> trigger as vezes não era disparada, quando o registro 
> era disparado em cascata... Mas como o Cantu respondeu
> realmente é disparada, e com o exemplo que eu coloquei 
> funciona perfeitamente (eu tentei simplificar o exemplo).
> Deixa eu ver se consigo explicar o que eu fiz e não funcionou 
> (é um pouco grande).
> 
> Eu estava fazendo um controle de nota fiscal e entrega da
> mercadoria... então eu tinha a table SAIDAS, SAIDAS_ITENS e
> SAIDAS_ITENS_BAIXA.
> 
> Saidas
> codigo (pk)
> data
> 
> saidas_itens
> codigo (pk)
> codigo_saidas (fk)
> codigo_item (fk)
> quantidade
> 
> saidas_itens_baixas
> codigo (pk)
> codigo_saidas_itens (fk)
> data
> quantidade
> 
> Entendeu até aqui?
> Então quando eu faço o lançamento na table Saidas_Itens não
> da baixa no estoque, vai dar baixa somente quando lanço na 
> Saidas_Itens_Baixa. Então eu fiz:
> 
> TRIGGER after post table saidas_itens_baixas
> 
> /*Encontrando o codigo do item */
> select saidas_itens.codigo_item
>   from saidas_itens
>  where saidas_itens.codigo = new.codigo_saidas_itens
>   into :va_codigo_item
> 
> update itens
>    set itens.estoque = itens.estoque - new.quantidade
>  where itens.codigo = :va_codigo_item
> 
> até ai blz... fiz tb outra TRIGGER
> before delete table saidas_itens_baixas
> 
> /*Encontrando o codigo do item */
> select saidas_itens.codigo_item
>   from saidas_itens
>  where saidas_itens.codigo = old.codigo_saidas_itens
>   into :va_codigo_item
> 
> update itens
>    set itens.estoque = itens.estoque + old.quantidade
>  where itens.codigo = :va_codigo_item
> 
> Agora vem a questão, se eu deletar o registro da table
> Saidas_Itens_Baixas então volta para o estoque blz... 
> Agora quando é deletada a table Saidas_Itens em cascata
> a Saidas_Itens_Baixas é deletada, mas vem o problema... 
> a TRIGGER before delete da table Saidas_Itens_Baixas é
> ativada.
> 
> /*Encontrando o codigo do item */
> select saidas_itens.codigo_item
>   from saidas_itens
>  where saidas_itens.codigo = old.codigo_saidas_itens
>   into :va_codigo_item
> 
> /* nesse momento a :va_codigo_item vai estar null, então o 
>    update abaixo não vai funcionar... */
> 
> update itens
>    set itens.estoque = itens.estoque + old.quantidade
>  where itens.codigo = :va_codigo_item
> 
> Ai eu pergunto Cantú, o firebird deleta primeiro os registros
> do Pai para depois apagar os arquivos filhos? E se apaga os Pai
> Primeiro como irá saber quais os filhos se já apagou os filhos?
> E o FireBird sabe então o select não deveria funcionar?
> 
> Agradecido.
> Eliomar,
> ICQ - 167715482
> MSN - eliomar0910 em hotmail.com
> Soft-Data Softwares Administrativos
> hptt://www.promediconet.com.br
> 
> 
> ______________________________________________
> 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