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.

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.