2025年1月30日木曜日

APEX 24.2にデータベース・オブジェクトの依存性を確認するUIが追加されました

Oracle APEX 24.1でパッケージAPEX_APP_OBJECT_DEPENDENCYが追加され、APEXアプリケーションが依存しているデータベース・オブジェクトについて確認できるようになりました。APEX 24.2では、データベース・オブジェクトの依存性を確認するユーザー・インターフェースが、アプリケーション・ビルダーに追加されました。

以下の手順で呼び出します。

アプリケーション・ビルダーより、データベース・オブジェクトの依存性を確認する対象のアプリケーションを開きます。


ユーティリティを開きます。


データベース・オブジェクトの依存性を開きます。


依存性のスキャンが未実施のときは、アプリケーションのスキャンを実行するように促されます。アプリケーションのスキャンとは、APEX_APP_OBJECT_DEPENDENCY.SCANの実行です。


スキャン・タイプ有効範囲を設定し、スキャンを実行します。

スキャン・タイプの選択はFull ScanErrors onlyのどちらかです。APEX_APP_OBJECT_DEPENDENCY.SCANの引数p_optionsにあたる設定です。

Full Scanがc_option_all、Errors onlyがc_option_errorsになるようです。c_option_dependenciesおよびc_option_identifiersの切り替えが意味を持つのは、PL/Scopeとしてidentifiers:allを設定し、データベース・オブジェクトの再コンパイルを行った場合に限られます。

有効範囲を設定することで、特定のページのみをスキャンの対象にできます。


スキャンが完了すると、そのアプリケーションが依存しているデータベース・オブジェクトと、そのデータベース・オブジェクトを参照しているアプリケーション内の位置が表示されます。

左ペインのツリーには概ねビューAPEX_USED_DB_OBJECTSの内容が表示されています。左ペインでオブジェクトを選択すると、選択したデータベース・オブジェクトでビューAPEX_USED_DB_OBJ_DEPENDENCIESを絞り込んだ内容が一覧されます。


依存性のクリアをクリックすると、APEX_APP_OBJECT_DEPENDENCY.CLEAR_CACHEが呼び出されます。


コンポーネントのプロパティはリンクになっています。


クリックすると、アプリケーション・ビルダーの該当ページが開きます。


以上がAPEX 24.2で追加された、データベース・オブジェクトの依存性を確認するUIです。

APEX 24.2では、依存性を検出するカバレッジが広がりました。パッケージTESTを作成し、引数として与えられた文字列をそのまま返すファンクションECHOを作成します。
create or replace package test as
function echo(p in varchar2)
return varchar2;
end;
/
create or replace package body test as
function echo(p in varchar2)
return varchar2
as
begin
    return p;
end echo;
end test;
/
このTEST.ECHOを、追加された検出対象に含めます。

レポート列のSQL式が対象になります。


RESTソースのデータ・プロファイル列タイプSQL式が対象になります。


RESTソースのローカル後処理タイプSQL問合せが対象になります。


ユーティリティからデータベース・オブジェクトの依存性を開きます。

依存しているオブジェクトとして検出されたパッケージTESTを選択すると、上記の3箇所がコンポーネントのプロパティにリンクとして表示されます。


パッケージAPEX_APP_OBJECT_DEPENDENCYについては、以前の記事「APEX_APP_OBJECT_DEPENDENCYを使ってAPEXアプリケーションが参照しているデータベース・オブジェクトを確認する」で紹介しています。この記事で作成したアプリケーションをAPEX 24.2向けに修正しました。
https://github.com/ujnak/apexapps/blob/master/exports/application-object-dependency-scanner-242.zip

APEXの標準としてデータベース・オブジェクトの依存性を確認するページが追加されましたが、上記のAPEXアプリケーションは、APIの呼び出しやPL/Scopeの設定が含まれているので、まだ参考になる部分はあります。

なぜかAPEX 24.2では、ビューAPEX_USED_DB_OBJECT_COMP_PROPSより列COMPONENT_IDが除かれています。

この列が無くなって困ることは無いと思いますが、このビューをソースとしているレポートでエラーは発生する可能性はあります。その場合は、レポートの列を同期化することで対応できます。

今回の記事は以上になります。

Oracle APEXのアプリケーション作成の参考になれば幸いです。