[firebase-br] Performance Inclusão Massa x Trigger x Tabelas

Gladiston Santana gladiston em vidy.com.br
Sex Nov 30 17:48:01 -03 2012


Não é bem assim.
Tem muitas formas de entrarmos com dados da sua aplicação para o BD.
Existe em alguns TQuery propriedades como InsertSQL/UpdateSQL/DeleteSQL alí
geralmente tá um codigo insert/update/delete usando como parametros os
dbfields de sua aplicacao, voce pode trocar esse codigo sql aproveitando os
parametros por algo como :
EXECUTE PROCEDURE
SP_QQCOISA('INCLUIR',<lista-de-seusparametros-separados-por-virgula>);

Na sua SP voce trata o primeiro parametro chamado 'INCLUIR' junto com os
outros campos que recebeu.
Se houver algo como BAIXA, chame a SP, trocando INCLUIR por BAIXA. Na SP
voce trata a ação que desejar.
Exemplo de uma SP com multiplos propositos, nesse caso
incluir/alterar/excluir :
SET TERM ^ ;

CREATE OR ALTER PROCEDURE SP_PAISES (
    p_acao d_codigo30,
    p_pais varchar(3),
    p_descricao d_nomecompleto = '',
    p_moeda d_codigo30 = '',
    p_moeda_sigla d_sigla5 = '',
    p_moeda_cifrao d_sigla5 = '$',
    p_status char(1) = 'A')
returns (
    result_value smallint)
as
begin
  result_value=0;
  if (:p_acao not in ('INCLUIR','ALTERAR','EXCLUIR')) then
  begin
    EXCEPTION ERR 'Acao solicitada fora dos parametros permitidos !';
    suspend;
    exit;
  end
  if (:p_acao='INCLUIR') then
  begin
    insert into admin_paises(pais, descricao, moeda, moeda_sigla,
moeda_cifrao, status)
    values(:p_pais,:p_descricao,:p_moeda, :p_moeda_sigla, :p_moeda_cifrao,
'A');
    result_value=1;
  end
  if (:p_acao='ALTERAR') then
  begin
    update admin_paises
    set descricao=:p_descricao,
        moeda=:p_moeda,
        moeda_sigla=:p_moeda_sigla,
        moeda_cifrao=:p_moeda_cifrao,
        status=:p_status
    where pais=:p_pais;
    result_value=1;
  end
  if (:p_acao='EXCLUIR') then
  begin
    delete from admin_paises
    where pais=:p_pais;
    result_value=1;
  end
  suspend;
end^

O exemplo acima é cadastral, porém voce pode fazer que ao realizar uma
inclusão, também execute outro procedimento como dar baixa  em estoque ou
recalcular algo e assim por diante. O melhor de tudo é procedures podem
chamar procedures, assim se algo é executado varias vezes de pontos
diferentes voce não precisa ficar replicando codigo.

[]´s e boa sorte;

PS: Não há nada de errado na trigger, o motivo da lentidão talvez não seja
codigo, mas a forma como seu isolamento tá sendo tratado dentro da
transação, isso é um chute, sem ver o database e o programa não dá para ter
certeza de nada.



Mais detalhes sobre a lista de discussão lista