[firebase-br] SP travando

Kelver Merlotti kmerlotti em gmail.com
Seg Set 22 17:49:46 -03 2008


Realmente Eduardo, da primeira forma não funcionaria, mas conforme
postei novamente - já corrigido - ainda não funcionou:

Magno.. fiz como o sugerido e infelizmente continua travando se
executo ela via select.. o fb para de responder.. depurando ela roda
normalex! já num select * from mysleep(10000) ela nunca mais retorna..
Veja como ficou:

CREATE PROCEDURE MYSLEEP (
   ms integer)
returns (
   endtime date)
as
declare variable tmp date;
begin
 ENDTIME = CURRENT_TIMESTAMP;
 TMP = ENDTIME + (MS / 1000) * (1/24/60/60);
 WHILE (ENDTIME < TMP) DO
   ENDTIME = CURRENT_TIMESTAMP;
 SUSPEND;
end

Não se assuste com o tipo "DATE" para o parâmetro ENDTIME e pra var.
TMP, pois nesse banco usa-se o dialeto 1 ainda, conseqüentemente, já
vêem com a hora junto..

Alguma luz? Se não, vou tentar partir pra UDF mesmo..

2008/9/22 Eduardo Pelizzari de Andrade <eduardoandrade em persoft.com.br>:
> Do jeito que você fez não vai funcionar. Vamos supor que que você rode
> as 15 hs 47 min 59 segs, ele vai retorar 59 em tmp no primeiro select,
> ai você soma 2 (2000/1000) vai dar 61, pronto endtime nunca será maior
> que 60, já que você volta segundos.
>
> Faça diferente, trabalhe com timestamp, a parte fracionada é a fração de
> um dia, desta forma o valor que você receber como parâmetro divida por
> (24 * 60 * 60), você terá o valor em segundos, some com a data/hora
> corrente, depois teste data/hora final, desta forma a rotina não dá pau,
> mesmo sendo rodada s 23:59:59 de um dia.
>
>
> Eduardo Pelizzari de Andrade
> Persoft Softwares Aplicativos
>
>
>
>
> Kelver Merlotti escreveu:
>> Fala galera, boa tarde!
>>
>> Procurei na net e não achei nenhuma SP pra executar um "sleep" no
>> banco (tipo o do delphi mesmo)..
>>
>> Daí resolvi montar minha própria procedure Sleep.. MAS, há algo de
>> errado no paraíso.. se depuro ela pelo IBExpert, funfa normalz.. mas
>> quando dou o "select * from myslee(2000)" o FB vai a 100% de uso da
>> sua CPU e nunca mais retorna!!
>>
>> Alguém tem alguma idéia? Segue abaixo o código da SP:
>>
>> ALTER PROCEDURE MYSLEEP (
>>     ms integer)
>> returns (
>>     endtime numeric(6,3))
>> as
>> declare variable tmp numeric(6,3);
>> begin
>>   SELECT EXTRACT(SECOND FROM CURRENT_TIMESTAMP)
>>     FROM RDB$DATABASE INTO :TMP;
>>
>>   ENDTIME = TMP;
>>   TMP = TMP + (MS / 1000);
>>
>>   WHILE (ENDTIME < TMP) DO
>>     SELECT EXTRACT(SECOND FROM CURRENT_TIMESTAMP)
>>       FROM RDB$DATABASE INTO :ENDTIME;
>>
>>   SUSPEND;
>> end
>>
>> Desde já, obrigado e abraço!!
>>
>>
>> ------------------------------------------------------------------------
>>
>>
>> No virus found in this incoming message.
>> Checked by AVG - http://www.avg.com
>> Version: 8.0.169 / Virus Database: 270.7.0/1684 - Release Date: 22/09/2008 06:39
>>
>>
>
> ______________________________________________
> 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
>



-- 
Kelver Merlotti
Coordenador Editorial do Portal www.ActiveDelphi.com.br
Contato: kelver em activedelphi.com.br
Google: kmerlotti em gmail.com
Msn: kmerlotti em hotmail.com




Mais detalhes sobre a lista de discussão lista