我有一个表,其中有一些与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
以下是包含工作明细的表格数据
问题是,有什么方法我可以使用查询检测到作业尚未在其RUNTIME
上运行,并且如果作业尚未在其RUNTIME
上运行,则标记为0
应该返回,如果已经运行,那么1
应该返回。
我正在通过将DUR添加到last_update来计算RUNTIME
,并且我还想放松30分钟来完成作业,该作业可以在实际运行时间后30分钟运行
答案 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分钟运行”。