terça-feira, 13 de julho de 2010

O comando WAITFOR

Hoje ao dar suporte em um pacote DTS 2000, me deparei com um problema inédito para mim. O pacote apresentava um VBScript que executava um programa desenvolvido em C++, recebendo alguns parâmetros. Este programa ,por sua vez, gerava um arquivo TXT que era consumido pelo pacote. O problema era que o a geração do TXT era tão rápida, que quando o passo de transformação acontecia o arquivo TXT ainda estava em uso pelo programa extrator. Outro fator que contribuía para o problema, era o fato que o VBScript não aguarda o fim da execução para ir para o próximo passo: assim que o Wscript.Shell executava o Run, o Script Task já estava finalizado.

Para minha surpresa, o VBScript (assim como o VB até a sua versão 6), não tem exatamente uma função de timer ou sleep, como temos em outras linguagens. Existem algumas funções e algoritmos que podem ser implementados para este fim, mas uma função nativa não existe. Então como resolver o problema? Antes da importação do arquivo, havia um passo de Sql Script Task que fazia um purge da tabela stage que recebia os dados antes de serem transferidos para a tabela final. Como estou estudando para a certificação, me lembrei de um comando aprendido no training kit da Microsoft Press, o comando WAITFOR.

O comando tem basicamente duas variações: WAITFOR DELAY e WAITFOR TIME.

O WAITFOR DELAY faz com que o escopo onde o comando está sendo executado fique em espera pelo tempo determinado. Por exemplo, se quisermos que o SQL SERVER espere por 5 segundos antes de executar os comandos subseqüentes, podemos implementar assim:

WAITFOR DELAY '00:00:05'

TRUNCATE TABLE tmp_logDiscador_stage

O WAITFOR TIME, faz com que o comando execute em um determinado momento. Por exemplo se queremos que um determinado comando execute as 22:30:

WAITFOR TIME '22:30'

TRUNCATE TABLE tmp_logDiscador_stage

Dentro do Script Task subseqüente ao passo onde o programa extrator era executado, inseri o WAIT FOR TIME,  com um timer de 10 segundos. Problema resolvido, e mais um usuário feliz. Até a próxima!

Nenhum comentário:

Postar um comentário

Leave your comment here!