ホーム > APEX_PLSQL_JOB > UPDATE_JOB_STATUSプロシージャ
![]() 前へ |
![]() 次へ |
このプロシージャをコールすると、現在実行しているジョブのステータスを更新できます。このプロシージャは、送信されたPL/SQLからコールされたときに最も有効です。
構文
APEX_PLSQL_JOB.UPDATE_JOB_STATUS (
p_job IN NUMBER,
p_status IN VARCHAR2);
パラメータ
表「UPDATE_JOB_STATUSパラメータ」に、UPDATE_JOB_STATUSプロシージャで使用可能なパラメータを示します。
UPDATE_JOB_STATUSパラメータ
| パラメータ | 説明 |
|---|---|
|
|
予約語JOBが渡されます。このコードが実行されると、予約語JOBを介してジョブ番号を表示できます。 |
|
p_status |
関連付けるプレーン・テキスト
|
例
次の例に、UPDATE_JOB_STATUSプロシージャを使用する方法を示します。この例では、次のことに注意してください。
002から010行では、100個のレコードをemp表に挿入するループを実行します。
APP_JOBは、INSERTのVALUES句内でバインド変数として参照され、UPDATE_JOB_STATUSへのコール内でp_jobパラメータの値として指定されます。
APP_JOBは、APEX_PLSQL_JOBに送信される際に、このプロセスに割り当てられるジョブ番号を表します。プロセス・コード内にこの予約アイテムを指定すると、実行時に実際のジョブ番号に置換されます。
この例では、コード・ブロック内で、10個のレコードごとにUPDATE_JOB_STATUSがコールされることに注意してください。通常、Oracleトランザクション規則では、コード・ブロック内で実行された更新は、トランザクション全体がコミットされるまで表示されません。一方、APEX_PLSQL_JOB.UPDATE_JOB_STATUSプロシージャは、ジョブが成功したか失敗したかにかかわらず更新を実行するように実装されています。このことは、次の2つの理由から重要です。
ステータスが「100 rows inserted」の場合でも、操作全体が成功したわけではありません。コード・ブロックでコミットが試行されたときにエラーが発生した場合、ステータスの更新は個別にコミットされるため、APEX_PLSQL_JOBSのuser_status列は影響を受けません。
更新は自律的に実行されます。ジョブが完了する前にジョブ・ステータスを表示できます。これによって、バックグラウンドで実行中の各操作についてステータス・テキストを表示できます。
BEGIN
FOR i IN 1 .. 100 LOOP
INSERT INTO emp(a,b) VALUES (:APP_JOB,i);
IF MOD(i,10) = 0 THEN
APEX_PLSQL_JOB.UPDATE_JOB_STATUS(
P_JOB => :APP_JOB,
P_STATUS => i || ' rows inserted');
END IF;
APEX_UTIL.PAUSE(2);
END LOOP;
END;