1

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

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

这是具有工作详细信息的表的数据

在此处输入图像描述

问题是我有什么方法可以使用查询来检测作业尚未在其上运行,RUNTIME如果作业尚未在其上运行,RUNTIME则标志0应返回,如果已运行1则应返回。

RUNTIME通过将 DUR 添加到 last_update 来计算,而且我想给作业 30 分钟的放松时间,该作业可以从实际运行时延迟 30 分钟运行

4

2 回答 2

0

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

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

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

于 2012-12-26T11:38:19.347 回答
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 分钟运行”。

于 2012-12-26T12:05:39.313 回答