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の使用など)。
  • SQLを戻すファンクションまたはSQLを戻すファンクション本体から発生する依存性は検出されません(ファンクションは実行されないため、それらで生成されるコードは依存性をスキャンされません)。
  • 再帰的な依存性(スキャンで検出されたオブジェクトによって参照される他のデータベース・オブジェクト)は検出されません。ヒント: USER_DEPENDENCIESデータベース・ビューを問い合せると、再帰的な依存性が見つかる場合があります。
  • サポート・オブジェクト・スクリプトの依存性は検出されません(必要なオブジェクト名、インストール・スクリプト、アップグレード・スクリプトまたはアンインストール・スクリプトで発生する可能性がある依存性など)。

構文

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;