DBMS_JOB / Oracleのジョブスケジューラ
-
25-09-2019 - |
質問
やあみんな、 私は、Oracle APEXのジョブスケジューラを作成する方法を思ったんだけど?
私は通話を管理するシステムを作ってるんだ、各コールは、重大度レベルを持っています。時間後、重大度レベルがエスカレートする必要があります。私は時間で検索しました、と私はジョブスケジューラを定義する手順を確認する必要があり、その後、アップデートを実行することを推測する?
あなたたちはいくつかの提案に自分の道を投げることができれば、私はそれを感謝します!
乾杯 リッチ
解決
、おそらく仕事が
のようなものになるだろう可能性が最も簡単な解決策CREATE PROCEDURE escalate_cases
AS
BEGIN
UPDATE tickets
SET status = 'ESCALATED'
WHERE status = 'NOT ESCALATED'
AND open_date < sysdate - interval '1' hour;
END escalate_cases;
DECLARE
l_jobno PLS_INTEGER;
BEGIN
dbms_job.submit(
l_jobno,
'BEGIN escalate_cases(); END;',
sysdate + interval '1' minute,
'sysdate + interval ''1'' minute'
);
dbms_output.put_line( 'Job ' || l_jobno || ' submitted.' );
commit;
END;
の手順では、あなたの基準を満たすすべてのチケットをエスカレートし、無名ブロックは、手順に毎分を実行するジョブを作成します。毎分(またはあなたがチケットをエスカレートするのを待つことができます長い間、あなたの許容度に応じて、数分ごとに)実行し、単一のジョブは、それが提出された後、正確に1時間を実行する各チケットの別々の仕事よりも管理が容易になるだろうます。
さて、あなたはもう少し洗練された取得したい場合は、DBMS_JOBパッケージがないことの機能のかなりDBMS_SCHEDULERパッケージの提供。それは仕事を行い、チケットは午前5時30分に作成された場合、あなたは6:30それをエスカレートしたくないかもしれない、すなわち(実行していない様々なウィンドウを定義するには、チェーンのジョブに能力を提供し、いくつかの自動ログ機能を提供しているためなど、)時間の後で、DBMS_SCHEDULERは、Oracleが動いている方向です。しかし、私はまだ自分がこのような比較的単純なタスクのためにDBMS_JOBを使用して見つけます。
他のヒント
私は良い成功を収めジャスティンによって記載された方法を使用しました。よく働くもう一つの方法は、遅延配信でキューを使用することです。それはあなたのエスカレーションのキュー上の外部のページングプログラムか何か待機を持ってすることができます。私はAPEXに精通しているが、そのコンテキストでは良いアイデアだ場合、私はわからないようにします。
ということはありませんよ