Oracle APEX のジョブスケジュール(Scheduler)を徹底解説
APEX_APPLICATION_AUTOMATION の使い方と PL/SQL 例付き
Oracle APEX には 定期的な処理(バッチジョブ)を自動実行するための仕組み「ジョブスケジュール」 が標準で備わっています。
月次レポート送信、毎日のデータ集計、メール通知、バックグラウンドタスクなど、業務アプリでは欠かせない機能です。
本記事では、Oracle APEX 24.1 を使用してジョブスケジュール(Automation)を作成・管理する方法を、実例付きで分かりやすく解説します。
1. APEX のジョブスケジュールとは?
Oracle APEX の自動化処理は次の 2 種類があります。
① APEX Automations(APEX_APPLICATION_AUTOMATION)
- APEX 画面から GUI で作成
- SQL, PL/SQL, メール送信、REST 呼び出しなど
- APEX アプリ内で簡単に管理できる
- ノーコード/ローコードで扱いやすい
② Oracle Database Scheduler(DBMS_SCHEDULER)
- PL/SQL で作成
- より高度で柔軟
- OS 統合や外部ジョブにも対応
- APEX Automations も内部的には scheduler job を使う
通常の APEX 開発では ① Automation を使うのが簡単でおすすめです。
2. Automation の作成方法(ステップバイステップ)
ここでは、毎日 1 回「在庫数量が少ない商品をメール通知する」Automation を例に説明します。
2.1 Automation の作成
- APEX アプリケーションを開く
- 左メニュー → 「自動化(Automation)」
- 「作成 Create」 をクリック
- 名称:
- スケジュール:
- 毎日
- 09:00 実行
3. トリガー(行ソース)の設定
Automation は「対象レコード」を SQL で取得することができます。
例:在庫が 10 以下の商品を取得
select product_id, product_name, stock_quantity
from products
where stock_quantity <= 10
この SQL を Automation の「ソース(Row Source)」に設定します。
4. アクション(処理)の追加
Automation に対して複数のアクションを追加できます。
4.1 メール通知アクション
「アクション追加」 → メール送信(Send Email)
設定 値
宛先 inventory@example.com
件名 "在庫警告:&PRODUCT_NAME."
本文 "在庫が少なくなっています(数量:&STOCK_QUANTITY.)"
Automation のパラメータ(例: &PRODUCT_NAME.)は、Row Source の列を意味します。
5. PL/SQL アクションを追加する
より複雑な処理を行いたい場合は "Execute PL/SQL Code" を追加します。
🧩 例:在庫履歴テーブルにログを記録する PL/SQL
declare
v_id number := :product_id;
v_stock number := :stock_quantity;
begin
insert into stock_history(product_id, stock_quantity, log_date)
values(v_id, v_stock, sysdate);
end;
Automation 内では Row Source のカラムは :COLUMN_NAME として参照できます。
6. Automation のテスト実行と監視
▶ テスト実行
Automation には "Run Now(今すぐ実行)" ボタンがあり、作成後すぐに動作確認できます。
6.1 実行ログの確認
APEX には Automation のログが標準で用意されています。
-
GUI で確認
-
アプリケーション → Automation → 対象 Automation → 実行履歴(Activity Log)
-
SQL で確認
-
内部ビュー APEX_AUTOMATION_LOG を使用できます。
select automation_name,
action_name,
log_timestamp,
status,
message
from apex_automation_log
order by log_timestamp desc;
7. 自動化が動かないときのチェックリスト
| 症状 | 確認すべきポイント |
|---|---|
| Automation が実行されない | Scheduler job が有効か? |
| メールが送れない | SMTP 設定が正しいか? |
| Row Source が空 | SQL の WHERE 条件を確認 |
| PL/SQL エラー | Automation のログに詳細が残る |
8. DBMS_SCHEDULER を使った高度なジョブ作成(オプション)
GUI ではなく PL/SQL で job を作りたい場合は dbms_scheduler.create_job を使います。
🧠 例:毎日 0 時にテーブルを更新する
begin
dbms_scheduler.create_job(
job_name => 'JOB_UPDATE_STOCK',
job_type => 'plsql_block',
job_action => 'begin update products set last_checked = sysdate; end;',
start_date => systimestamp,
repeat_interval => 'freq=daily; byhour=0; byminute=0; bysecond=0;',
enabled => true
);
end;
/
9. Automation と DBMS_SCHEDULER の違いまとめ
| 項目 | Automation | DBMS_SCHEDULER |
|---|---|---|
| 実装 | GUI ベース | PL/SQL コード |
| 監視 | APEX 管理画面 | DBA / SQL |
| 柔軟性 | 中程度 | 非常に高い |
| 初心者向け | ◎ | △ |
| APEX アイテム参照 | 可能 | 不可 |
✅ まとめ
本記事では Oracle APEX の ジョブスケジュール(Automation と Scheduler) について説明しました。
- AutomationAutomation は GUI で簡単に作れ、業務向け定期処理に最適
- Row Source を使うことで対象レコードごとに処理が可能
- メール送信、PL/SQL、REST 呼び出しなど多様なアクションが設定可能
- Scheduler を使えばデータベース標準の強力なバッチ処理も作成できる
- APEX の Automation を活用すれば、アプリの自動化・効率化が大幅に向上します。