[firebase-br] Chamando Store Procedure FB252
Mário Reis
mariodosreyx em gmail.com
Qua Nov 20 14:49:08 -03 2013
Olá boa gente,
Nunca vi nada escrito acerca disto mas, se bem percebi(experimentando) é
assim: quando temos uma store procedure e a chamamos através por exemplo, do
D7 através do MDOStoreProc1 (ou, penso que será o mesmo IBO, IB etc), o
pedido entra e sai logo no ***primeiro*** "Suspend" sem correr, top/down, a
Procedure(que deverá processar um ficheiro de pagamento inteirinho 50000
linhas).
Então, que processe todas aquelas linhas só deveremos deixar, apenas no fim,
para qualquer eventualidade, um: ***When Any Do Begin ... OUT_PUT_PARMS... e
Suspend End***. Certo? Sendo que assim só termos esta resposta em caso de
erro. E, o commit control como ficaria. Assim?
If MDOStrProcPg.Transaction.InTransaction then
MDOStrProcPg.Transaction.Rollback;
Try MDOStrProcPg.Transaction.StartTransaction;
MDOStrProcPagaPs2.Close;
.ParamByName('IN_TRANSAC_ID').AsString:='42555' ;
.ParamByName('IN_DATA').AsDate:=MainForm.DtApp;
MDOStrProcPg.Prepare;
MDOStrProcPg.ExecProc;
MDOStrProcPg.Transaction.CommitRetaining ;
Except
MDOStrProcPg.Transaction.RollbackRetaining ;
End;
De contrário, o melhor será talvez, por exemplo, usar um MdoQry1(ou
IBQUERY1) com um Select * from
StoreProcedure_XPT(:IN_PARM1,:IN_PAMR2...) assim:
MdoQry1.Close;
with MdoQry1 do begin
ParamByName('IN_CONTROLO').AsString := IntToStr(iControloID) ;
ParamByName('IN_DATA').AsDate:=MainForm.DtApp;
end;
E, de seguida procurar o controlo do commit e rollback assim:
If MdoQry1.Transaction.InTransaction then
MdoQry1.Transaction.Rollback;
Try
MdoQry1..Transaction.StartTransaction;
MdoQry1.active := true;
MdoQry1.Transaction.CommitRetaining;
Except
MdoQry1.Transaction.RollbackRetaining ;
End;
A questão é saber se para um processamento batch o melhor será fazermos uma
Store Procedure ***sem*** "Suspend(s)", ou se, depois de processar de cada
linha fazemos "Suspend" e despejamos para o utilizador tantas linhas e
colunas quantos os tratamentos efectuados!? Obrigado
Mário
Mais detalhes sobre a lista de discussão lista