Oracle APEX 22.2よりプロセス・タイプとしてAPIの呼び出し(Invoke API)が追加されています。PL/SQLのサブプログラム(プロシージャおよびファンクション)をAPEXのプロセスとして呼び出すことができます。
PL/SQLでは引数の名前や数、データ型が異なるサブプログラムを同じサブプログラム名で作成できます。一般にはオーバーロードと呼ばれます。PL/SQL言語リファレンスでは、以下のように説明されています。
8 PL/SQLサブプログラム
8.9 オーバーロードされたサブプログラム
https://docs.oracle.com/cd/F19136_01/lnpls/plsql-subprograms.html#GUID-47D5A50E-7AAF-4C80-A06A-37593EA2526A
オーバーロードされているプロシージャまたはファンクションをAPIの呼び出しに指定する方法を紹介します。
今回はOracle APEX 23.1に追加されたパッケージAPEX_BACKGROUND_PROCESSに含まれるABORTプロシージャを呼び出してみます。
このプロシージャをプロセスに設定すると、以下のように警告が表示されます。
プロセス → オーバーロード確認 → 設定 → プロシージャまたはファンクション
プロシージャまたはファンクションTESTはオーバーロードされています。パッケージ仕様部で最初に出現するパラメータを使用しています。
プロシージャAPEX_BACKGROUND_PROCESS.ABORTのパラメータとしてp_application_idとp_process_idが認識されています。
パッケージAPEX_BACKGROUND_PROCESSの定義を確認してみます。
一般にOracle APEXに含まれるPL/SQLパッケージはシノニムとして定義されています。今回の例ではAPEX_BACKGROUND_PROCESSがシノニムになります。このシノニムより、実体となるパッケージを求めます。ビューALL_SYNONYMSを検索します。
select * from all_synonyms where synonym_name = 'APEX_BACKGROUND_PROCESS';このパッケージがWWV_FLOW_PROCESS_BG_APIとして実装されていることがわかります。このパッケージの定義部のソースを出力します。
プロシージャABORTに関しては、以下の2通りの呼び出し方法が定義されていることが確認できます。
ひとつはp_process_idを引数とします。
--==============================================================================
-- Abort all executions of an execution Chain. Note that this procedure
-- cannot be used in SQL Workshop, SQL Commands.
--
-- Parameters:
-- * p_application_id: ID of the application containing the process
-- * p_process_id: ID of the execution chain to abort executions for
--
-- Example:
-- Abort all executions for a process ID.
--
-- begin
-- apex_background_process.abort(
-- p_application_id => 100,
-- p_process_id => 9023498034890234890 );
-- end;
--
-- Since: 23.1
--==============================================================================
procedure abort(
p_application_id in number default wwv_flow.g_flow_id,
p_process_id in number );
--==============================================================================
-- Abort a specific execution of an execution Chain. Note that this procedure
-- cannot be used in SQL Workshop, SQL Commands.
--
-- Parameters:
-- * p_application_id: ID of the application containing the process
-- * p_execution_id: ID of the execution to abort
--
-- Example:
-- Abort background execution ID 4711
--
-- begin
-- apex_background_process.abort(
-- p_application_id => 100,
-- p_execution_id => 4711 );
-- end;
--
-- Since: 23.1
--==============================================================================
procedure abort(
p_application_id in number default wwv_flow.g_flow_id,
p_execution_id in number );