[firebase-br] SP travando

Eduardo Pelizzari de Andrade eduardoandrade em persoft.com.br
Seg Set 22 17:36:46 -03 2008


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
>
>   




Mais detalhes sobre a lista de discussão lista