4.3 SCANプロシージャ

このプロシージャは、オブジェクトの依存性レポートを生成します。

アプリケーション(またはアプリケーション内のページ)で、依存するすべてのデータベース・オブジェクト(表、ビュー、プロシージャ、ファンクション、パッケージおよびシノニムを含む)がスキャンされます。これらの依存性がフォーム、レポート、PL/SQLリージョン、条件、プラグインまたはその他の場所にあるかどうかは関係ありません。

結果は、次のビューを問い合せることで表示されます:

  • APEX_USED_DB_OBJECT_COMP_PROPS - 見つかったすべてのアプリケーションSQLおよびPL/SQL
  • APEX_USED_DB_OBJECTS - 参照されているすべてのデータベース・オブジェクト
  • APEX_USED_DB_OBJ_DEPENDENCIES - 見つかったすべての依存性

SQLまたはPL/SQLの一部が無効(たとえば、必要なオブジェクトがない)の場合、依存性は検出されません。コンパイル・エラー・メッセージは、APEX_USED_DB_OBJECT_COMP_PROPSビューで問い合せることができます。

スキャンの結果は、次が実行されるまで保存されます:

  • 新しいスキャンが開始される
  • apex_app_object_dependency.clear_cacheがコールされる
  • Oracle APEXインスタンスがアップグレードされる

PL/Scope

スキャナは、PL/Scopeでコンパイルされたパッケージ内のファンクションおよびプロシージャに固有の依存性のみを検出します。スキャンを開始する前に、PL/Scopeを使用して目的のスキーマをコンパイルすることを選択できます:

alter session set plscope_settings='identifiers:all';
exec sys.dbms_utility.compile_schema(user, true);
alter session set plscope_settings='identifiers:none';

コードベースのサイズによっては、実行に時間がかかる場合があります。

PL/Scopeでコンパイルされていないパッケージの場合、スキャナはパッケージに対する依存性のみを検出しますが、レポートではその中で参照される各メソッドはリストされません。

要件

アプリケーション所有者スキーマには、CREATE PROCEDURE権限が必要です。

既知の制限事項

  • 動的に生成されたSQL内の依存性は検出されません(即時実行またはdbms_sqlの使用など)。
  • 再帰的な依存性(スキャンで検出されたオブジェクトによって参照される他のデータベース・オブジェクトなど)は検出されません。ヒント: USER_DEPENDENCIESデータベース・ビューを問い合せると、再帰的な依存性が見つかる場合があります。
  • サポート・オブジェクト・スクリプトの依存性(必要なオブジェクト名、インストール・スクリプト、アップグレード・スクリプトまたはアンインストール・スクリプトで発生する可能性のある依存性を含む)は検出されません。
  • SQLを戻すファンクションから発生する依存性は検出されません(ファンクションが実行されないため、生成するSQLは依存性をスキャンしません)。
  • ただし、SQL式に基づいてレポート列の依存性は常に検出されるわけではありません。
  • RESTサービス問合せ(#APEX$SOURCE_DATA#)から発生する依存性は検出されません。
  • データ・プロファイルSQL式から発生する依存性はまだ検出されません。

構文

APEX_APP_OBJECT_DEPENDENCY.SCAN (
    p_application_id IN NUMBER,
    p_page_id        IN NUMBER   DEFAULT NULL,
    p_options        IN VARCHAR2 DEFAULT c_option_all )

パラメータ

パラメータ 説明
p_application_id 分析するアプリケーションのID。
p_page_id アプリケーションの単一ページを分析するには、このパラメータを設定します。
p_options

オプションは次のとおりです:

  • c_option_all - (デフォルト)すべてのソースをスキャンします。
  • c_option_dependencies - dba_dependenciesで最上位の依存性のみをスキャンします。
  • c_option_identifiers - PL/Scopeが使用可能な場合、詳細な依存性をスキャンします。これにより、表およびビューの列に対する依存性の検出、およびidentifiers:allでコンパイルされたパッケージ内のメンバー・ファンクションおよびプロシージャも検出できます。
  • c_option_errors - どちらもスキャンしません(コンパイル・エラーのみをレポートします)。

BEGIN
    apex_app_object_dependency.scan ( p_application_id => :app_id );
END;