Pregunta

Tengo una base de datos Oracle 10G con diferentes trabajos. Uno de los trabajos de las this tiene que funcionar cada dos horas. Por lo tanto, los parámetros "next_dat" y "intervalo" se ven así.

   ,next_date => to_date('27.04.2011 10:18:00','dd/mm/yyyy hh24:mi:ss')
   ,interval  => 'to_date(to_char(sysdate + (2/24), ''DD.MM.YYYY HH24:MI''), ''DD.MM.YYYY HH24:MI'')'

Los trabajos no necesitan correr por la noche. Entonces, la pregunta es: ¿es posible diseñar, por ejemplo, "intervalo" de esa manera, que los trabajos solo se ejecutan entre las 6 a.m. y las 8 p.m. (en HH24 06:00 hasta las 20:00).

Mi primera idea (y la última opción) es un trabajo adicional que establece el trabajo principal en "roto" entre las 8 p.m. y las 6 a.m. Pero no me gusta la idea de un trabajo diferente.

¡Gracias!

¿Fue útil?

Solución

Puede usar una declaración de caso en el intervalo para verificar la hora del día y luego omitir:

case
  when to_char(trunc(sysdate, 'HH24') + 2/24, 'HH24') between '06' and '20' then
    trunc(sysdate, 'HH24') + 2/24 
  else
    trunc(sysdate)+1+(6/24)
end

Esto se puede ampliar para incluir un cheque en el día de la semana. (Debe tener cuidado al verificar el día de la semana, ya que depende de la configuración de NLS).

Algo como lo siguiente manejaría el día de la semana, pero tendrá que confirmar los casos de borde y verificar su configuración de NLS (para mí, el lunes es el día 1 y el domingo es el día 7):

case
  when
    to_number(to_char(sysdate, 'D')) between 1 and 5 then
      case
        when to_char(trunc(sysdate, 'HH24') + 2/24, 'HH24') between '06' and '20'
                                                                            then 
          trunc(sysdate, 'HH24') + 2/24 
        else 
          trunc(sysdate)+1+(6/24)
        end
  else
    trunc(sysdate) + (8 - to_number(to_char(sysdate, 'D'))) + 6/24
end 

Aunque ... piense que ahora estamos firmemente en la etapa de "tiempo para corregir una función". :)

Otros consejos

Haga del intervalo una función, luego puede tener el control que desee.

Vea aquí para un ejemplo:

http://www.orafaq.com/node/871

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top