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返されます。

私はRUNTIMElast_update に DUR を追加して計算しています。また、実際の実行時間から 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
/

2 番目の CASE() ステートメントは、派生ランタイムに余分な 30 分を追加して、「そのジョブは実際のランタイムから 30 分遅れて実行できる」という補足要件を考慮します。

于 2012-12-26T12:05:39.313 に答える