Delete cascade com execute block

31/01/2013

2

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:
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...
Obrigado
Responder