Fórum Instrucao de Deletar (Firebird) #45021
21/06/2004
0
:oops:
CAROS,
tenho um banco de dados com as seguintes tabelas
LANCAMENTOS -> lancamentos do meu plano de contas
PLANO -> registros do plano de contas
tem 4 nivels no meu plano de contas
1
1.01
1.01.01
1.01.01.001
existe um campo, em PLANO, chamado ID (identificador do registro-unico). Existe um campo, em LANCAMENTOS, chamado ID_PLANO, que faz referene entre as duas tabelas.
Meu problema é : .. se eu deletar uma conta, exemplo, conta 1.01.01.001 (id=300), basta eu montar a instrucao em LANCAMENTOS, excluindo o registor cuja referencia em ID_PLANO = ID (em plano), ok. sem problemas
O detalhe é :, vamos supor qu eu delete a conta 1.01 (cujo ID=144), nao posso simplesmente deletar o ID_PLANO (em lancamentos) cuja referente lhe pertence, tenho que deletar os registros filhos que estao em (1.01....) em (PLANO e LANCAMENTOS). (DELECAO EM CASCATA).
SELECT COUNT(*) FROM LANCAMENTOS L
LEFT JOIN PLANO PL ON(PL.ID = L.ID_PLANO)
WHERE PL.NRCONTA LIKE :CONTA || ´¬´
neste select, consigo visualizar todos os registros pai-filhos., mas esta instrucao nao funciona em a instrucao DELETE, exemplo >
DELETE FROM LANCAMENTOS L
LEFT JOIN PLANO PL ON(PL.ID = L.ID_PLANO)
WHERE PL.NRCONTA LIKE :CONTA || ´¬´. :?:
Alguma dicas ? tenho uma solucao, mas fica baseada num DO WHILE, gostaria de fazer numa instrucao SQL, por se muito mais rapido.
:idea:
Obrigado.
No aguardo,
CAROS,
tenho um banco de dados com as seguintes tabelas
LANCAMENTOS -> lancamentos do meu plano de contas
PLANO -> registros do plano de contas
tem 4 nivels no meu plano de contas
1
1.01
1.01.01
1.01.01.001
existe um campo, em PLANO, chamado ID (identificador do registro-unico). Existe um campo, em LANCAMENTOS, chamado ID_PLANO, que faz referene entre as duas tabelas.
Meu problema é : .. se eu deletar uma conta, exemplo, conta 1.01.01.001 (id=300), basta eu montar a instrucao em LANCAMENTOS, excluindo o registor cuja referencia em ID_PLANO = ID (em plano), ok. sem problemas
O detalhe é :, vamos supor qu eu delete a conta 1.01 (cujo ID=144), nao posso simplesmente deletar o ID_PLANO (em lancamentos) cuja referente lhe pertence, tenho que deletar os registros filhos que estao em (1.01....) em (PLANO e LANCAMENTOS). (DELECAO EM CASCATA).
SELECT COUNT(*) FROM LANCAMENTOS L
LEFT JOIN PLANO PL ON(PL.ID = L.ID_PLANO)
WHERE PL.NRCONTA LIKE :CONTA || ´¬´
neste select, consigo visualizar todos os registros pai-filhos., mas esta instrucao nao funciona em a instrucao DELETE, exemplo >
DELETE FROM LANCAMENTOS L
LEFT JOIN PLANO PL ON(PL.ID = L.ID_PLANO)
WHERE PL.NRCONTA LIKE :CONTA || ´¬´. :?:
Alguma dicas ? tenho uma solucao, mas fica baseada num DO WHILE, gostaria de fazer numa instrucao SQL, por se muito mais rapido.
:idea:
Obrigado.
No aguardo,
Pedih
Curtir tópico
+ 0
Responder
Posts
21/06/2004
Gandalf.nho
Na hora de criar o relacionamento entre as tabelas no banco use a opção DELETE CASCADE e ao excluir o registro pai, os filhos irão automaticamente.
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)