[firebase-br] ZeosDBO e Execute block funciona?

Carlos H. Cantu listas em warmboot.com.br
Terça Outubro 26 06:02:07 -03 2021


Você não disse qual a mensagem de erro gerada, mas enfim, parece que
tem (ou tinha) prolemas com execute block e Zeos:

https://sourceforge.net/p/zeoslib/tickets/67/

https://sourceforge.net/p/zeoslib/tickets/384/

[]s
Carlos H. Cantu
eBook Guia de Migração para o FB 4 - www.firebase.com.br/guiafb4.php
www.FireBase.com.br - www.firebirdnews.org - blog.firebase.com.br

GSvl> Primeiro eu tentei:
GSvl> query1.sql.text:='
GSvl> execute block (
GSvl>   P_UUID_AGENDA varchar(36)=?     ,
GSvl>   P_UUID_COLABORADOR varchar(36)=?,
GSvl>   P_DT_NUTIL date=?          ,
GSvl>   P_DESCRICAO varchar(4096)=?     )
GSvl> as
GSvl> begin
GSvl>   if (not exists(select * from AGENDA_NUTIL
GSvl>                 where UUID_COLABORADOR=:P_UUID_COLABORADOR
GSvl>                    and DT_NUTIL=:P_DT_NUTIL)) then
GSvl>   begin
GSvl>     update or insert into AGENDA_NUTIL (
GSvl>       UUID_AGENDA, UUID_COLABORADOR, DT_NUTIL, DESCRICAO)
GSvl>     values (
GSvl>       :P_UUID_AGENDA, :P_UUID_COLABORADOR, :P_DT_NUTIL, :P_DESCRICAO)
GSvl>     matching (UUID_AGENDA);
GSvl>   end
GSvl> end
GSvl> ';
GSvl>    query1  .prepare;
GSvl> Então descobri que o Zeos prepara sem erros, mas não executa com ExecSQL
GSvl> dando erro na primeira linha. Código tá perfeito no IBExpert e é a forma
GSvl> que uso no Firedac. Daí chutei o pau da barraca e construi a query ficando
GSvl> assim:
GSvl> execute block as
GSvl> declare variable  P_UUID_AGENDA varchar(36)='1';
GSvl> declare variable  P_UUID_COLABORADOR varchar(36)='0';
GSvl> declare variable  P_DT_NUTIL date='06.04.2012';
GSvl> declare variable  P_DESCRICAO varchar(4096)='Imenda de feriado 06/04 sexta
GSvl> feira santa';
GSvl> begin
GSvl>   if (not exists(select * from AGENDA_NUTIL
GSvl>                 where UUID_COLABORADOR=:P_UUID_COLABORADOR
GSvl>                    and DT_NUTIL=:P_DT_NUTIL)) then
GSvl>   begin
GSvl>     update or insert into AGENDA_NUTIL (
GSvl>       UUID_AGENDA, UUID_COLABORADOR, DT_NUTIL, DESCRICAO)
GSvl>     values (
GSvl>       :P_UUID_AGENDA, :P_UUID_COLABORADOR, :P_DT_NUTIL, :P_DESCRICAO)
GSvl>     matching (UUID_AGENDA);
GSvl>   end
GSvl> end
GSvl> Nada de errado nela, o IBExpert executa normalmente, mas o ZeosDBO falha
GSvl> dizendo que tem erro na primeira linha.
GSvl> Alguém ai já conseguiu executar execute block com o Zeos? Tô começando a
GSvl> achar que ele não vai funcionar.




Mais detalhes sobre a lista de discussão lista