[firebase-br] Execute Block: "Executes a block of PSQL code as if it were a stored procedure, optionally with input and output parameters and variable declarations"
Gladiston Santana
gladiston em vidy.com.br
Sex Jan 24 11:18:18 -03 2020
Se eu entedi direito você quer usar o execute block ao inves de procedure,
está correto?
Bem isso, é simples, pega a procedure e muda apoenas o cabecalho, daí é uma
query qualquer em seu sistema, a unica coisa que é mais dificil é usar
queries parametrizadas com ela, não é que não seja possivel, mas é bem
diferente do convencional, veja este exemplo:
if qcount.Active then
qcount.Close;
qcount.SQL.Clear;
qcount.SQL.Add('EXECUTE BLOCK (');
qcount.SQL.Add(' P_CODITEM varchar(30)=?,');
qcount.SQL.Add(' P_ANO int=? )');
qcount.SQL.Add('RETURNS(RESULT_VALUE bigint) AS');
qcount.SQL.Add('DECLARE VARIABLE C bigint;');
qcount.SQL.Add('BEGIN');
qcount.SQL.Add(' RESULT_VALUE=0;');
qcount.SQL.Add('');
qcount.SQL.Add(' IF (LEFT(:p_coditem,4)=''BDI-'') THEN');
qcount.SQL.Add(' BEGIN');
qcount.SQL.Add(' SELECT COUNT(*) FROM CV_BDI ');
qcount.SQL.Add(' WHERE coditem=:p_coditem AND EXTRACT(YEAR FROM
LAST_UPDATE)=:P_ANO');
qcount.SQL.Add(' INTO :C;');
qcount.SQL.Add(' RESULT_VALUE=(:RESULT_VALUE+:C);');
qcount.SQL.Add(' END');
qcount.SQL.Add(' (...)'); // so um trecho de teste
qcount.SQL.Add(' SUSPEND;');
qcount.SQL.Add('END');
if not qcount.prepared then
qcount.Prepare;
Daí para executar:
qcount.Params[0].AsString:=sCoditem_produto;
qcount.Params[1].AsInteger:=iAno;
qcount.Open;
Apesar de sua versatilidade e velocidade por rodar diretamente no servidor
toma cuidado se planeja usar multi-banco no futuro, pois essa forma de
execução não é ANSI e seria dificil de portar para outros bancos.
[] ´s
Em qua., 22 de jan. de 2020 às 13:35, Mário Reis <mariodosreyx em gmail.com>
escreveu:
> Cantú ou Gladison,
>
> Àquele de vós que possa estar mais disponível rogo o favor de me informar
> como usar "Execute Block" uma vez que dentro de uma store procedure não dá
> e como?
> Por exemplo no próprio Servidor do Firebird, ou a partir do meu programa em
> Delphi ou C++ etc... Mas como? Ainda não percebi. O problema deve ser meu,
> mas até agora
> não encontrei um único exemplo a funcionar de modo a que possa perceber.
> Obrigado
> E, desculpem qualquer coisa.
>
> Com os meus melhores cumprimentos
> Mário Agostinho Reis
> 919262146
>
> Esta mensagem contém informação de natureza confidencial e é
> exclusivamente dirigida ao(s) destinatário(s) indicado(s). Se, por engano,
> receber este email agradecemos que não o copie nem o reenvie e que nos
> notifique do ocorrido através do email de resposta.
> [image: cloudHQ]
> <
> https://chrome.google.com/webstore/detail/free-email-tracker/nknojfclnachdkpdkjbbhbkgpnladhnj
> >
> Powered
> by
> cloudHQ
> <
> https://chrome.google.com/webstore/detail/free-email-tracker/nknojfclnachdkpdkjbbhbkgpnladhnj
> >
> ______________________________________________
> 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://www.firebase.com.br/pesquisa_lista.html
>
--
A Vidy possui um Sistema de Gestão da Qualidade estruturado e com
Certificação ISO 9001 há mais de 10 anos, mantendo seu foco na Qualidade e
na Melhoria Continua.
Em março de2018 migramos com sucesso para a nova versão da ISO 9001.
Somos a única Empresa Brasileira de Engenharia de Laboratórios com
certificação com o Escopo Completo; desde Projetos, Engenharia, Construção,
Fabricação e Instalação de Laboratórios.
Mais detalhes sobre a lista de discussão lista