[firebase-br] Performance Inclusão Massa x Trigger x Tabelas
Valdemir (gmail)
valdemirjs em gmail.com
Sex Nov 30 19:39:20 -03 2012
Entendi, realmente nunca tinha pensado neste tipo de solução muito obrigado
-----Mensagem Original-----
From: Gladiston Santana
Sent: Friday, November 30, 2012 5:48 PM
To: FireBase
Subject: Re: [firebase-br]Performance Inclusão Massa x Trigger x Tabelas
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.
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa
Mais detalhes sobre a lista de discussão lista