[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