[firebase-br] RES: DELETE CASCADE

Jonas Rodrigo Pacheco jonas.pacheco em tecnicon.com.br
Sex Nov 9 10:28:07 -03 2012


Carlos,

Criar mais uma trigger porque o delete cascade não funciona conforme o esperado?

Discordo do que está escrito no http://tracker.firebirdsql.org/browse/CORE-1541, na minha opinião é um bug sim, pois se há um processo de controle transacional descente ele deve fazer um lock/bloqueio no registro que vai ser deletado (não permitindo que novos filhos sejam inseridos por outra transação usando o registro pai que vai ser deletado), deleta os 'filhos' e então, para finalizar deleta o registro pai. 

Jonas Rodrigo Pacheco
Administrador de Banco de Dados

-----Mensagem original-----
De: lista [mailto:lista-bounces em firebase.com.br] Em nome de Carlos H. Cantu
Enviada em: sexta-feira, 9 de novembro de 2012 09:55
Para: FireBase
Assunto: Re: [firebase-br] DELETE CASCADE

Se vc precisa que os filhos sejam apagados antes dos pais, desligue o cascade e faça o delete dos filhos no trigger "before delete" do pai.

[]s
Carlos H. Cantu
www.FireBase.com.br - www.firebirdnews.org www.warmboot.com.br - blog.firebase.com.br

JRP> Quando mando excluir a venda, ele exclui primeiro a venda e depois 
JRP> os itens da venda, com isso tenho os seguintes problemas:


JRP> ·         Em todas as tabelas tem uma trigger responsável pelo
JRP> sincronismos entre as bases de dados, e no banco de dados Firebird, 
JRP> as informações para sincronizar acabam ficando na ordem inversa, 
JRP> pois em vez de deletar os itens primeiro, primeiro ele deleta a 
JRP> venda - consequentemente quando ele vai realizar as operações do 
JRP> sincronismo na outra base de dados ocorre o erro, pois ele tenta 
JRP> deletar a venda sem deletar os itens antes.

JRP> ·         Na tabela de itens da venda, tenho uma trigger no
JRP> evento Delete, que busca informações da venda para manter o saldo 
JRP> de estoque. Porém como a venda não existe mais, esses informações 
JRP> vem null, causando mais um problema.

JRP> Na teoria de um SGBD, o delete cascade trabalha diferente, primeiro 
JRP> ele deleta os registros 'filho' e depois então dele o registro da tabela 'pai'.

JRP> Observação: já troquei o evento das triggers de before para after e 
JRP> continua o mesmo problema.

JRP> Versões do Firebird: 2.5.0, 2.5.1 e 2.5.2

JRP> Desde já agradeço a atenção de todos!

JRP> Jonas Rodrigo Pacheco
JRP> Administrador de Banco de Dados



JRP> ______________________________________________
JRP> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br 
JRP> Para saber como gerenciar/excluir seu cadastro na lista, use:
JRP> http://www.firebase.com.br/fb/artigo.php?id=1107
JRP> 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






Mais detalhes sobre a lista de discussão lista