如何在工作未运行时检查

时间:2012-12-26 11:03:40

标签: sql oracle date-arithmetic

我有一个表,其中有一些与oracle job相关的数据,它执行一些程序。这是查询和数据格式。

SELECT SRLNUM, TABLE_NAME, PURPOSE, LAST_UPDATE, DUR,
TO_DATE (TO_CHAR (LAST_UPDATE, 'MM/DD/YYYY HH:MI:SS AM'),'MM/DD/YYYY HH:MI:SS AM')+ DUR / (24 * 60) RUNTIME
FROM V_DASHJOBS

以下是包含工作明细的表格数据

enter image description here

问题是,有什么方法我可以使用查询检测到作业尚未在其RUNTIME上运行,并且如果作业尚未在其RUNTIME上运行,则标记为0应该返回,如果已经运行,那么1应该返回。

我正在通过将DUR添加到last_update来计算RUNTIME,并且我还想放松30分钟来完成作业,该作业可以在实际运行时间后30分钟运行

2 个答案:

答案 0 :(得分:0)

您可以使用这样的查询来获取时间之间的差异。

select (last_update+ duration/1440) - last_update  from dual;

希望持续时间是以分钟为单位的时间。

答案 1 :(得分:0)

我们可以使用Oracle的DATE数据类型进行算术运算,因此您对RUNTIME的计算过于复杂。

此查询接受您的查询并添加CASE语句,以将派生的RUNTIME与当前日期时间进行比较。如果我已正确理解您的要求,则可以确定作业是否按计划运行。

with data as (
    SELECT SRLNUM
          , TABLE_NAME
          , PURPOSE
          , LAST_UPDATE
          , DUR
          , LAST_UPDATE+ (DUR / (24 * 60)) RUNTIME
    FROM V_DASHJOBS )
select data.*
       , case when sysdate < data.runtime then 1 else 0 end as haz_run
       , case when sysdate < data.runtime + (1/48) then 1 else 0 end as haz_run_with_slack
from data
/

第二个CASE()语句为派生运行时增加了额外的半小时,以满足您的补充要求,“该作业可以在实际运行时间后30分钟运行”。