やあみんな、Oracle APEXでジョブスケジューラをどのように作成するのか疑問に思っていますか?
私は通話を管理するシステムを作っています。各通話には重大度レベルがあります。1時間後、重大度レベルを上げる必要があります。何時間も検索しましたが、ジョブスケジューラを定義してから更新を実行するプロシージャを作成する必要があると思いますか?
皆さんが私のやり方でいくつかの提案を投げることができれば、私はそれをいただければ幸いです!
乾杯リッチ
やあみんな、Oracle APEXでジョブスケジューラをどのように作成するのか疑問に思っていますか?
私は通話を管理するシステムを作っています。各通話には重大度レベルがあります。1時間後、重大度レベルを上げる必要があります。何時間も検索しましたが、ジョブスケジューラを定義してから更新を実行するプロシージャを作成する必要があると思いますか?
皆さんが私のやり方でいくつかの提案を投げることができれば、私はそれをいただければ幸いです!
乾杯リッチ
私の考えでは、おそらく機能する可能性のある最も単純な解決策は、次のようなものです。
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分ごとに実行される単一のジョブ(または、チケットのエスカレーションを待つことができる長い時間の許容範囲によっては数分ごと)は、送信されてから正確に1時間後に実行されるチケットごとに個別のジョブよりも管理が容易になります。 。
ここで、もう少し洗練されたものにしたい場合は、DBMS_SCHEDULERパッケージが、DBMS_JOBパッケージにはないかなりの機能を提供します。自動ロギングを提供し、ジョブを連鎖させ、ジョブが実行されるウィンドウと実行されないウィンドウを定義する機能を提供します(つまり、チケットが5:30に作成された場合、6:30にエスカレーションしたくない場合があります。そして、DBMS_SCHEDULERは、Oracleが進んでいる方向です。しかし、私はまだこのような比較的単純なタスクにDBMS_JOBを使用していることに気づきます。
私はジャスティンによってリストされた方法をうまく使用しました。うまく機能するもう1つの方法は、配信が遅れているキューを使用することです。これにより、外部のページングプログラムなどをエスカレーションのキューで待機させることができます。私はAPEXにあまり詳しくないので、そのコンテキストでそれが良いアイデアかどうかはわかりません。
こちらの資料をご覧ください