[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