Deletar registros de várias tabelas usando execute block
Olá amigos do fórum
tenho um problema que já está me persiguindo há alguns dias e talvez alguém dos amigos do fórum possa me ajudar.
tenho 4 tabelas Vendas(VENDAS), Itens da Venda(VENDAITENS), Lançamentos do Caixa(LANCAMENTOS)e Contas Pagas(CTAPAGAS).Montei um execute block para zerar a movimentação dessas tabelas dado um período inicial e final. O script é este abaixo:
Dessa forma ele exclui, só que para um período de 2 dias exemplo: 10/01/2013 a 12/01/2013 ela demora cerca de 5 minutos para excluir, está muito lento. Algum dos amigos conhece uma outra forma de otimizar essa operação ? Pq suponho o seguinte, se para excluir a movimentação de 2 dias demora 5 minutos imaginem para excluir 2 meses então...
Desde já agradeço a quem possa me ajudar!
tenho um problema que já está me persiguindo há alguns dias e talvez alguém dos amigos do fórum possa me ajudar.
tenho 4 tabelas Vendas(VENDAS), Itens da Venda(VENDAITENS), Lançamentos do Caixa(LANCAMENTOS)e Contas Pagas(CTAPAGAS).Montei um execute block para zerar a movimentação dessas tabelas dado um período inicial e final. O script é este abaixo:
EXECUTE BLOCK( DATA1 DATE = :DATA1, DATA2 DATE = :DATA2 ) AS DECLARE VARIABLE DATAVENDA DATE; DECLARE VARIABLE IDVENDA INTEGER=0; BEGIN FOR SELECT VENDAS.DATA, VENDAS.IDVENDA FROM VENDAS WHERE VENDAS.DATA BETWEEN :DATA1 AND :DATA2 AND VENDAS.COO IS NULL INTO :DATAVENDA, :IDVENDA AS CURSOR CRVENDAS DO BEGIN DELETE FROM VENDAITENS WHERE VENDAITENS.IDVENDA = :IDVENDA; DELETE FROM VENDAS WHERE CURRENT OF CRVENDAS; DELETE FROM LANCAMENTOS WHERE DATA = :DATAVENDA; DELETE FROM CTAPAGAS WHERE DATA = :DATAVENDA; END END
Dessa forma ele exclui, só que para um período de 2 dias exemplo: 10/01/2013 a 12/01/2013 ela demora cerca de 5 minutos para excluir, está muito lento. Algum dos amigos conhece uma outra forma de otimizar essa operação ? Pq suponho o seguinte, se para excluir a movimentação de 2 dias demora 5 minutos imaginem para excluir 2 meses então...
Desde já agradeço a quem possa me ajudar!
Itamar Monteiro
Curtidas 0
Respostas
Rafael Cunha
03/02/2013
Tenta conforme abaixo, caso o seu relacionamento com VENDAITENS for Delete Cascate ao deletar uma venda o mesmo irá deleta os itens da venda.
EXECUTE BLOCK( DATA1 DATE = :DATA1, DATA2 DATE = :DATA2 ) AS BEGIN DELETE FROM VENDAS VENDAS.DATA BETWEEN :DATA1 AND :DATA2 AND VENDAS.COO IS NULL DELETE FROM LANCAMENTOS WHERE DATA BETWEEN :DATA1 AND :DATA2; DELETE FROM CTAPAGAS WHERE DATA BETWEEN :DATA1 AND :DATA2; END
GOSTEI 0
Itamar Monteiro
03/02/2013
Então Rafael, na tabela de venda e vendasitens eu tinha esse relacionamento, mas o problema é que quando eu excluía com esse relacionamento demorava mais ainda.... por essa razão eu tirei a foreign key, dessa forma eu deleto primeiro os itens e depois a venda, entendeu?
GOSTEI 0