[firebase-br] Delete em cascata usando SQL

Raul Iavelberg raul.iavelberg em itelefonica.com.br
Sex Out 8 13:21:58 -03 2004


Francisco,

Sou novo no FB, mas lá vai: não sei o que você precisa exatamente em sua 
aplicação,
mas, talvez, o melhor seja declarar os relacionamentos entre as tabelas 
com "DELETE CASCADE",
assim, quando fosse dado um delete, em qualquer um dos níveis, tudo o 
que houvesse para "baixo"
seria automaticamente deletado.

[]s

Raul



Danilo Rogério wrote:

>Thiagão e Luiz... não sei, mas vc não deveria tentar no início do seu delete colocar o código da transferência???
>Por Ex:
> 
>DELETE FROM TRANSFERIDO TRS
>WHERE TRS.CODIGO_TRANSFERENCIA IN (
>                   SELECT T.CODIGO
>                   FROM TRANFERENCIA T
>                   WHERE T.CODIGO_VENDA_LOTE IN (
>                                       SELECT VL.CODIGO
>                                       FROM VENDALOTE L
>                                       WHERE VL.CODIGO_LOTE IN (
>                                                            SELECT L.CODIGO
>                                                            FROM LOTE L
>                                                            WHERE LOTEAMENTO = 16
>                                                         )
>                                        )
>                )
>
> 
>Posso estar falando besteira mas o vc deve usar um parâmetro(coluna) antes do IN...
> 
>Até mais,
>Danilo
>
>Francisco Thiago Almeida <jeandeadlucky em yahoo.com.br> wrote:
>
>Caros amigos, 
>
>O meu colega de servico tem de fazer um delete em cascata com a seguinte estrutura (pais acima, filhos abaixo. Todas as relacoes sao NxN)
>
>Loteamento (este será o excluido)
>Lote
>VendaLote
>Parcela | Comprador | Transferencia
>Transferido
>
>Como a cascata até transferido é a maior, nós comecamos o teste com ela e usamos o SQL:
>
>DELETE FROM TRANSFERIDO TRS
>WHERE IN (
>SELECT T.CODIGO
>FROM TRANFERENCIA T
>WHERE IN (
>SELECT VL.CODIGO
>FROM VENDALOTE L
>WHERE IN (
>SELECT L.CODIGO
>FROM LOTE L
>WHERE LOTEAMENTO = 16
>)
>)
>)
>E demorou muito pra executar!!! (E não existem registros na tabela de Transferido. Para tentar solucionar tentamos outro SQL:
>
>DELETE FROM TRANSFERIDO TRS
>WHERE EXISTS (
>SELECT T.CODIGO
>FROM TRANFERENCIA T
>WHERE EXISTS (
>SELECT VL.CODIGO
>FROM VENDALOTE L
>WHERE EXISTS (
>SELECT L.CODIGO
>FROM LOTE L
>WHERE LOTEAMENTO = 16
>AND VL.LOTE = L.CODIGO
>)
>)
>)
>Este sequer chegou ao fim de sua execução.
>
>Neste caso, o que acontece no BDE? (isso mesmo, BDExPiradox) A consulta com o Exists nao deveria ser mais veloz? Vocês acham que rolar tabela seria mais rápido? Existe uma forma de otimizar este consulta?
>
>
>
>Obrigado
>
>
>
>
>
>-----------------------------------------------
>Francisco Thiago de Almeida 
>MRL Consultoria em Informática 
>Divisão Desenvolvimento e Banco de Dados
>Franca/SP
>
>---------------------------------
>Yahoo! Acesso Grátis - Internet rápida e grátis. Instale o discador agora!
>______________________________________________
>FireBase-BR (www.firebase.com.br)
>Para editar sua configuração na lista, use o endereço http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>
>		
>---------------------------------
>Yahoo! Acesso Grátis - Internet rápida e grátis. Instale o discador agora!
>______________________________________________
>FireBase-BR (www.firebase.com.br)
>Para editar sua configuração na lista, use o endereço http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>
>
>  
>






Mais detalhes sobre a lista de discussão lista