Encontrar a diferença em horas utilizando PL/SQL da Oracle

Veja aqui uma forma simples de encontrar a diferença em horas utilizando PL/SQL da Oracle.

[ad#texto]

Você já tentou encontrar a diferença em horas utilizando PL/SQL da Oracle? Uma tarefa aparentemente simples pode ser potencial desastrosa, principalmente se o resultado desta diferença for inferior ao período de uma hora, o resultado obtido fatalmente estará errado e caso você esteja utilizando este cálculo para tomada de decisão sobre a performance de uma aplicação PL/SQL você pode ser surpreendido ao finalizar o projeto.

Encontrar a diferença em horas utilizando PL/SQL da Oracle
Encontrar a diferença em horas utilizando PL/SQL da Oracle

Para encontrar a diferença em horas utilizando o PL/SQL da Oracle será preciso realizar uma série de conversões para termos certeza que o cálculo da diferença em segundos, minutos e horas está sendo realizado a contento.

Veja o exemplo abaixo, presumindo que a QUERY em questão demore para finalizar a sua execução teremos no final a real diferença de tempo, note que imprimi no console os tempos de início e fim para que você possa conferir os resultados:

DECLARE
 vrTempo  DATE := SYSDATE;
 vrTempoF DATE;
 vrCont   PLS_INTEGER := 0;
 vrDif    VARCHAR2(400);

BEGIN
 dbms_output.put_line('Inicial: ' || TO_CHAR(vrTempo, 'HH24:MI:SS'));

 SELECT COUNT(1)
  INTO vrCont
 FROM sua_tabela
 WHERE campo = 1;

 dbms_output.put_line('Registros: ' || vrCont);

 vrTempoF := SYSDATE;

 dbms_output.put_line('Final: ' || TO_CHAR(vrTempoF, 'HH24:MI:SS'));

 vrDif := LPAD(TRUNC(( (vrTempoF - vrTempo) * 86400 / 3600)), 2, '0')  ||':' ||
 LPAD(TRUNC(MOD( (vrTempoF - vrTempo) * 86400 , 3600 ) / 60 ), 2, '0') || ':'||
 LPAD(TRUNC(MOD(MOD( (vrTempoF - vrTempo) * 86400, 3600 ), 60)), 2, '0');

 dbms_output.put_line('Dif: ' || vrDif);
END;

Muito simples, na saída do console você verá a hora de início, término e a quantidade de tempo decorrido.

Petter Rafael

Desenvolvedor Web atua com as tecnologias Java e PHP apoiadas pelos bancos de dados Oracle e MySQL. Além dos ambientes de desenvolvimento acima possuiu amplo conhecimento em servidores Apache/Tomcat, Photoshop, Arte & Foto, Flash e mais uma dezena de ferramentas e tecnologias emergentes. Atualmente colabora com o Viablog escrevendo sobre programação e tecnologia.