こんにちは。山田です。
Oracle APEXには自動化というジョブを定期的に実行する機能があります。今回は定期実行ではなく、アプリケーション側から手動で実行する方法について、以下の流れで解説いたします。
- 自動化とジョブの作成
- ジョブを実行するインターフェースの作成
- ジョブを実行するプロセスの記載
バージョン情報
項目 | バージョン |
---|---|
Oracle APEX | 23.2.0 |
Oracle Database | 19c |
更新履歴
日付 | 更新概要 |
---|---|
2025/07/11 | 記事公開 |
自動化とジョブの作成
自動化の作成
作成済みのアプリケーション開発ページ > 共有コンポーネント > 自動化と移動します。

作成ボタンをクリックし自動化の作成フォームを開きます。


- 名前は任意です。
- タイプ > オンデマンドを選択します。
- スケジュール済みは自動化のジョブを指定した間隔や時間で実行します。(今回は選択しません。)
- アクションの開始については、問合せを選択してください。
次 >
をクリックしソースの設定に移ります。

- データ・ソース > ローカル・データベース
- ここでは自動化の実行条件となるソースの種類を選択します。
- ソース・タイプ > 表
- 所有者 > 任意のスキーマ
- 表/ビューの名前 > 任意のテーブル
- アクションの実行時間 > 行が返される
- 行が返されるを選択すると、表に存在するデータに対して1行ずつジョブを実行します。データを絞る場合は、ソースタイプでSQL問合せを選択するか、実行時にフィルタを構成できます。
表/ビューの名前で指定するのはジョブの実行条件として利用されるテーブルです。取得したデータは作成したジョブのコード内で利用できます。
今回はサンプルとして以下の構成のテーブルを使用します。
- TESTテーブル
カラム名 | データ型 | 制約 | 説明 |
---|---|---|---|
ID | NUMBER | PRIMARY KEY | 主キー |
VALUE | VARCHAR2 | 値 |
- テーブルデータ
ID | VALUE |
---|---|
1 | a |
2 | b |
3 | c |
11 | aa |
22 | bb |
33 | cc |
ジョブの作成
追加した自動化に対してジョブの追加を行います。
自動化追加後のページからアクションセクションまで移動し、ペンマークをクリックしアクションの設定ページを開きます。
こちらのアクションについては自動化作成時点で自動的に追加されるようになっています。
自動化で実行されるジョブの追加を行います。
今回はデバッグメッセージの出力を行います。
取得した行のVALUE列データを、:VALUE
バインド変数で利用できます。
以下が実際に使用するPL/SQLコードです。
begin
APEX_AUTOMATION.LOG_INFO(
p_message => '動作確認, VALUE:'||:VALUE);
end;
変更後ページ右上の変更の適用
ボタンから保存します。
ジョブを実行するインターフェースの作成
次に、自動化を実行する際のインターフェース部分を作成します。
アプリケーションのページデザイナに戻り、適当な場所にボタンを配置します。

ボタン名は任意です、プロセスを設定する際に用います。
次に、プロセスタブに移動し、プロセスを追加します。

プロセス名は任意です。
ソース > PL/SQLコード については後ほど記載するので、空欄のまま進めます。
追加したプロセスの サーバー側の条件 > ボタン押下時 にて先ほど追加したボタンを指定します。

ジョブを実行するプロセスの記載
今回自動化を実行するために、APEX_AUTOMATION
のEXECUTE
プロシージャを用いますが、3種類のシグネチャが存在するため、それぞれの実装方法と特徴について記載します。
APEX_AUTOMATION.EXECUTE シグネチャ1を使用した実装
シグネチャ1の説明
まずは構文と各引数について公式ドキュメントのOracle APEX APIリファレンス
> 10.4 EXECUTEプロシージャのシグネチャ1
を参考に説明させて頂きます。
Oracle APEX APIリファレンス, リリース23.2
F90504-02
10 APEX_AUTOMATION
- 構文
APEX_AUTOMATION.EXECUTE (
p_application_id IN NUMBER DEFAULT {current application id},
p_static_id IN VARCHAR2,
p_filters IN apex_exec.t_filters DEFAULT apex_exec.c_empty_filters,
p_order_bys IN apex_exec.t_order_bys DEFAULT apex_exec.c_empty_order_bys )
- 引数
パラメータ | 説明 |
---|---|
p_application_id | 自動化を含むアプリケーションのID。 |
p_static_id | 実行する自動化の静的ID。 |
p_filters | 自動化問合せに適用する追加のフィルタ。 |
p_order_bys | 自動化問合せに適用するORDER BY句。 |
こちらは、一番簡素に自動化を実行できるプロシージャです。
シグネチャ1を使用した実装
追加したプロセスの ソース > PL/SQLコード のエディタを開きます。

以下のPL/SQLコードを記載します。
begin
APEX_AUTOMATION.EXECUTE (
p_application_id => <アプリケーション番号>,
p_static_id => <自動化の静的ID>
);
end;
p_application_id
には実行したい自動化が存在するアプリケーション番号を選択します。p_static_id
には 共有コンポーネント > 自動化 から実行する自動化を選択し、自動化ページ内の 名前 > 静的ID に記載されているものを指定します。
p_static_id
の参照先

以下が実際に記載したものになります。
シグネチャ1の動作確認
変更を保存した後、アプリケーションを実行し、追加したボタンをクリックして自動化を実行してみます。

再び開発画面に戻り、共有コンポーネント > 自動化 と移動し、実行ログの箇所をクリックします。

実行ログ画面へ遷移すると、実行した自動化の履歴が確認できます。
先ほど実行した行のメッセージ列の数字をクリックします。

この画面でログの出力がされているので、自動化が実行されたことが確認できます。
メッセージから、バインド変数の:VALUE
がTEST
テーブルの各レコードの値に置き換わって出力されているのが確認できると思います。

★ここまでで自動化をオンデマンドで実行することが可能になりました。
この先ではより詳細な設定を行った方法の紹介を行いますので、気になる場合は引き続きご覧いただけると幸いです。
フィルタ・order byを使用する場合
フィルタ・order byを使用した実装
再び実行アプリケーションのページデザイナに戻り、プロセスタブから作成済みのプロセスのコード・エディタを開きます。
今回はID
が11
以上のカラムを降順に処理する、という場合を想定します。
PL/SQLコードは以下になります。
declare
l_filters APEX_EXEC.t_filters;
l_order_bys APEX_EXEC.t_order_bys;
begin
APEX_EXEC.ADD_ORDER_BY(
p_order_bys => l_order_bys,
p_column_name => 'ID',
p_direction => APEX_EXEC.c_order_desc
);
APEX_EXEC.ADD_FILTER(
p_filters => l_filters,
p_column_name => 'ID',
p_filter_type => APEX_EXEC.c_filter_gte,
p_value => 11
);
APEX_AUTOMATION.EXECUTE (
p_application_id => <アプリケーション番号>,
p_static_id => <自動化の静的ID>,
p_filters => l_filters,
p_order_bys => l_order_bys
);
end;
ADD_ORDER_BY
プロシージャで降順に処理を行う設定を行い、ADD_FILTER
プロシージャでID
が11
以上の絞り込みの設定を行っています。
詳細については公式ドキュメントのOracle APEX APIリファレンス
> 25 APEX_EXEC
を参照して頂けますと幸いです。
Oracle APEX APIリファレンス, リリース23.2
F90504-02
25 APEX_EXEC
以下が実際に記載したものになります。
通常のプロセス同様、アプリケーションアイテムのバインド変数を指定することで、動的な自動化の実行を行うことも可能です。
フィルタ・order by使用時の動作確認
実行した結果は以下の通りです。

IDが11以上のaa
, bb
, cc
のみが出力されるようになっています。
(わかりやすいようにデバッグメッセージにIDも出力されるように変更しています。)
また、ログは最新のものが上に表記されるため、降順で実行されていることもわかると思います。
APEX_AUTOMATION.EXECUTE シグネチャ2を使用した実装
シグネチャ2の説明
こちらについてもまずは構文と各引数について公式ドキュメントのOracle APEX APIリファレンス
> 10.5 EXECUTEプロシージャのシグネチャ2
を参考に説明させて頂きます。
Oracle APEX APIリファレンス, リリース23.2
F90504-02
10 APEX_AUTOMATION
- 構文
APEX_AUTOMATION.EXECUTE (
p_application_id IN NUMBER DEFAULT {current application id},
p_static_id IN VARCHAR2,
p_run_in_background IN BOOLEAN )
- 引数
パラメータ | 説明 |
---|---|
p_application_id | 自動化を含むアプリケーションのID。 |
p_static_id | 実行する自動化の静的ID。 |
p_run_in_background | TRUEの場合、同期はワンタイムDBMS_SCHEDULERジョブとしてバックグラウンドで実行されます。 |
こちらは、バックグラウンドで自動化を実行可能なプロシージャです。p_run_in_background
をTRUE
に設定した場合、フォアグラウンドで実行する場合と異なり、セッションのタイムアウトを超えるほど時間のかかる処理を行うことが可能です。
シグネチャ2を使用した実装
実際にシグネチャ2を使用して実装してみます。
追加したプロセスの ソース > PL/SQLコード のエディタを開きます。
以下のPL/SQLコードを記載します。
begin
APEX_AUTOMATION.EXECUTE (
p_application_id => <アプリケーション番号>,
p_static_id => <自動化の静的ID>,
p_run_in_background => TRUE
);
end;
以下が実際に記載したものになります。
シグネチャ2の動作確認
手順についてはシグネチャ1の時と同様です。
実行結果を確認します。

実行結果としては、シグネチャ1の簡易的な方式の実行結果と同様です。
こちらの実行結果では確認できませんが、バックグラウンドで実行されました。
APEX_AUTOMATION.EXECUTE シグネチャ3を使用した実装
シグネチャ3の説明
こちらについてもまずは構文と各引数について公式ドキュメントのOracle APEX APIリファレンス
> 10.6 問合せコンテキストのEXECUTEプロシージャ
を参考に説明させて頂きます。
Oracle APEX APIリファレンス, リリース23.2
F90504-02
10 APEX_AUTOMATION
ドキュメントには問い合わせコンテキストのEXECUTEプロシージャ
と記載されているのですが、ここではシグネチャ3と呼ばせて頂きます。
- 構文
APEX_AUTOMATION.EXECUTE (
p_application_id IN NUMBER DEFAULT {current application id},
p_static_id IN VARCHAR2,
p_query_context IN apex_exec.t_context )
- 引数
パラメータ | 説明 |
---|---|
p_application_id | 自動化を含むアプリケーションのID。 |
p_static_id | 実行する自動化の静的ID。 |
p_query_context | 問合せのアクションを実行するコンテキスト。 |
こちらはシグネチャ1のフィルタ機能をSQLのクエリで実現することができるシグネチャです。
シグネチャ3を使用した実装
こちらも実装を行います。
追加したプロセスの ソース > PL/SQLコード のエディタを開きます。
以下のPL/SQLコードを記載します。
declare
l_context APEX_EXEC.t_context;
begin
l_context := APEX_EXEC.OPEN_QUERY_CONTEXT(
p_location => APEX_EXEC.c_location_local_db,
p_sql_query => <SQLクエリ>
);
APEX_AUTOMATION.EXECUTE (
p_application_id => <アプリケーション番号>,
p_static_id => <自動化の静的ID>,
p_query_context => l_context
);
end;
以下が実際に記載したものになります。
こちらではAPEX_EXEC
のOPEN_QUERY_CONTEXT
ファンクションを使用してSQLクエリをEXECUTE
に渡します。
今回の場合はTEST
テーブルからID
が1と11のレコードを取得して実行しました。
シグネチャ3の動作確認
これまでと同様に自動化を実行し、結果を確認します。

実行結果からわかるように、ID
が1と11のレコードでのみ実行されています。
わかりやすいようにデバッグメッセージにID
も出力されるように変更しています。
シグネチャ3に関してもフォアグラウンドで実行する形なので、時間のかかる処理を行う場合はシグネチャ2を使用する必要があります。
以上で、Oracle APEXの自動化を画面のボタンから実行する方法についての解説を終わります。
ご覧いただきありがとうございました。