APEX_DEBUG
パッケージには、デバッグ・メッセージ・ログを管理するためのユーティリティ・ファンクションが用意されています。具体的には、このパッケージには、Application Expressアプリケーションに含まれるPL/SQLコードおよびデータベース・ストアド・プロシージャとファンクション内のPL/SQLコードのインストルメントおよびデバッグに必要なAPIが提供されています。PL/SQLコードをインストルメントすると、より迅速にバグを追跡し、予期しない動作を特定することが容易になります。
パッケージには、様々なデバッグ・レベルでのデバッグを有効または無効にする手段、およびメッセージ・ログをクリーンアップするユーティリティ・プロシージャもあります。
『Oracle Application Expressアプリケーション・ビルダー・ユーザーズ・ガイド』のデバッグ・モードへのアクセスに関する説明を参照するか、またはAPEX_DEBUG_MESSAGES
ビューを問い合せることによって、メッセージ・ログを表示できます。
詳細は、個々のAPIの説明を参照してください。
注意: Oracle Application Express 4.2では、APEX_DEBUG_MESSAGEパッケージは、APEX_DEBUGにリネームされました。APEX_DEBUG_MESSAGEパッケージ名は、下位互換性のために引き続きサポートされます。ただし、Oracle Application Expressの旧バージョンでAPEX_DEBUGパッケージを実行する場合を除き、新規アプリケーションでは新しいAPEX_DEBUGパッケージを使用することをお薦めします。 |
トピック:
このパッケージでは、次の定数が使用されます。
subtype t_log_level is pls_integer; c_log_level_error constant t_log_level := 1; -- critical error c_log_level_warn constant t_log_level := 2; -- less critical error c_log_level_info constant t_log_level := 4; -- default level if debugging is enabled (for example, used by apex_application.debug) c_log_level_app_enter constant t_log_level := 5; -- application: messages when procedures/functions are entered c_log_level_app_trace constant t_log_level := 6; -- application: other messages within procedures/functions c_log_level_engine_enter constant t_log_level := 8; -- Application Express engine: messages when procedures/functions are entered c_log_level_engine_trace constant t_log_level := 9; -- Application Express engine: other messages within procedures/functions
このプロシージャは、デバッグ・メッセージを有効にします。重要性のレベルごとに、監視されるデバッグ・メッセージのタイプを指定できます。
注意: ENABLE プロシージャは、ページ・ビューまたはページ受入れごとに1回のみコールする必要があります。 |
構文
APEX_DEBUG.ENABLE ( p_level IN T_LOG_LEVEL DEFAULT C_LOG_LEVEL_INFO );
パラメータ
表7-1に、APEX_DEBUG.ENABLE
プロシージャで使用可能なパラメータを示します。
表7-1 APEX_DEBUG.ENABLEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
ログに記録するメッセージの1つ以上のレベル。1から9までの整数である必要があり、レベル1は重要度が最も高いメッセージで、レベル9(デフォルト)は重要度が最も低いメッセージです。特定のレベルを設定すると、そのレベルおよびそのレベルより下のメッセージが記録されます。たとえば、 |
例
次の例に、レベル1、2および4のメッセージのロギングを有効にする方法を示します。これより高いレベルのメッセージは記録されません。
BEGIN APEX_DEBUG.ENABLE( apex_debug.c_log_level_info); END;
このプロシージャは、c_log_level_app_enter
レベルのメッセージを記録します。APEX_DEBUG.ENTER()
を使用して、プロシージャまたはファンクションの先頭にあるルーチン名とその引数を記録します。
構文
APEX_DEBUG.ENTER ( p_routine_name IN VARCHAR2, p_name01 IN VARCHAR2 DEFAULT NULL, p_value01 IN VARCHAR2 DEFAULT NULL, p_name02 IN VARCHAR2 DEFAULT NULL, p_value02 IN VARCHAR2 DEFAULT NULL, p_name03 IN VARCHAR2 DEFAULT NULL, p_value03 IN VARCHAR2 DEFAULT NULL, p_name04 IN VARCHAR2 DEFAULT NULL, p_value04 IN VARCHAR2 DEFAULT NULL, p_name05 IN VARCHAR2 DEFAULT NULL, p_value05 IN VARCHAR2 DEFAULT NULL, p_name06 IN VARCHAR2 DEFAULT NULL, p_value06 IN VARCHAR2 DEFAULT NULL, p_name07 IN VARCHAR2 DEFAULT NULL, p_value07 IN VARCHAR2 DEFAULT NULL, p_name08 IN VARCHAR2 DEFAULT NULL, p_value08 IN VARCHAR2 DEFAULT NULL, p_name09 IN VARCHAR2 DEFAULT NULL, p_value09 IN VARCHAR2 DEFAULT NULL, p_name10 IN VARCHAR2 DEFAULT NULL, p_value10 IN VARCHAR2 DEFAULT NULL, p_value_max_length IN PLS_INTEGER DEFAULT 1000 );
パラメータ
表7-2に、APEX_DEBUG.ENTER
プロシージャで使用可能なパラメータを示します。
表7-2 APEX_DEBUG.ENTERプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
プロシージャまたはファンクションの名前。 |
|
プロシージャまたはファンクションのパラメータの名前および値。 |
|
値 |
例
次の例に、APEX_ENTERを使用して、プロシージャの先頭にデバッグ・メッセージを追加する方法を示します。
procedure foo ( p_widget_id in number, p_additional_data in varchar2, p_emp_rec in emp%rowtype ) is begin apex_debug.enter('foo', 'p_widget_id' , p_widget_id, 'p_additional_data', p_additional_data, 'p_emp_rec.id' , p_emp_rec.id ); ....do something.... end foo;
このプロシージャは、c_log_level_error
レベルのメッセージを記録します。記録は、デバッグ・モードがオフになっている場合も含め、常に行われます。
構文
APEX_DEBUG.ERROR ( p_message IN VARCHAR2, p0 IN VARCHAR2 DEFAULT NULL, p1 IN VARCHAR2 DEFAULT NULL, p2 IN VARCHAR2 DEFAULT NULL, p3 IN VARCHAR2 DEFAULT NULL, p4 IN VARCHAR2 DEFAULT NULL, p5 IN VARCHAR2 DEFAULT NULL, p6 IN VARCHAR2 DEFAULT NULL, p7 IN VARCHAR2 DEFAULT NULL, p8 IN VARCHAR2 DEFAULT NULL, p9 IN VARCHAR2 DEFAULT NULL, p_max_length IN PLS_INTEGER DEFAULT 1000 );
パラメータ
表7-3に、ERROR
プロシージャで使用可能なパラメータを示します。
表7-3 APEX_DEBUG.ERRORプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
デバッグ・メッセージ。'%s'の文字列は、 |
|
'%s'プレースホルダに対する置換文字列。 |
|
値 |
例
次の例に、APEX_ERROR
を使用して、デバッグ・ログに重大なエラーを記録する方法を示します。
apex_debug.error('Critical error %s', sqlerrm);
このプロシージャは、c_log_level_info
レベルのメッセージを記録します。記録は、デバッグ・モードがオフになっている場合も含め、常に行われます。
構文
APEX_DEBUG.INFO ( p_message IN VARCHAR2, p0 IN VARCHAR2 DEFAULT NULL, p1 IN VARCHAR2 DEFAULT NULL, p2 IN VARCHAR2 DEFAULT NULL, p3 IN VARCHAR2 DEFAULT NULL, p4 IN VARCHAR2 DEFAULT NULL, p5 IN VARCHAR2 DEFAULT NULL, p6 IN VARCHAR2 DEFAULT NULL, p7 IN VARCHAR2 DEFAULT NULL, p8 IN VARCHAR2 DEFAULT NULL, p9 IN VARCHAR2 DEFAULT NULL, p_max_length IN PLS_INTEGER DEFAULT 1000 );
パラメータ
表7-4に、APEX_DEBUG.INFO
プロシージャで使用可能なパラメータを示します。
表7-4 APEX_DEBUG.INFOプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
デバッグ・メッセージ。'%s'の文字列は、 |
|
'%s'プレースホルダに対する置換文字列。 |
|
値 |
例
次の例に、APEX_DEBUG.INFO
を使用して、デバッグ・ログにログ情報を記録する方法を示します。
apex_debug.info('Important: %s', 'fnord');
このプロシージャは、デバッグ・ログにdbms_output.get_lines
のコンテンツを記述します。dbms_output
を使用するレガシー・アプリケーションのメッセージは、デバッグ・ログにコピーされます。デバッグ・ログに書き込むには、dbms_output.enable
を実行する必要があります。
構文
APEX_DEBUG.LOG_DBMS_OUTPUT;
パラメータ
なし。
例
次の例に、デバッグ・ログにDBMS_OUTPUT
バッファのコンテンツを記録する方法を示します。
sys.dbms_output.enable; sys.dbms_output.put_line('some data'); sys.dbms_output.put_line('other data'); apex_debug.log_dbms_output;
このプロシージャを使用して、Application ExpressのPLSQLコンポーネント、またはPLSQLプロシージャとファンクションからデバッグ・メッセージを生成します。このプロシージャは、LOG_MESSAGEと同様ですが、より長いメッセージのロギングが可能な点のみ異なります。このメッセージ・ログは、デバッグ出力で4,000の文字のチャンクに分割されます。1つのデバッグ・メッセージは4,000文字までに制限されているためです。
注意: このプロシージャのかわりに、「ERRORプロシージャ」、「WARNプロシージャ」、「MESSAGEプロシージャ」、「INFOプロシージャ」、「ENTERプロシージャ」または「TRACEプロシージャ」を使用します。 |
構文
APEX_DEBUG.LOG_LONG_MESSAGE ( p_message IN VARCHAR2 DEFAULT NULL, p_enabled IN BOOLEAN DEFAULT FALSE, p_level IN T_LOG_LEVEL DEFAULT C_LOG_LEVEL_APP_TRACE);
パラメータ
表7-5に、APEX_DEBUG.LOG_LONG_MESSAGE
プロシージャで使用可能なパラメータを示します。
表7-5 APEX_DEBUG.LOG_LONG_MESSAGEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
長いログ・メッセージ(最大サイズは32767バイト)。 |
|
デバッグが有効かどうかに関係なく、メッセージを常にログに記録するには |
p_level |
長いログ・メッセージのレベルを識別します。「定数」を参照してください。 |
例
次の例に、レベル1および2のメッセージに関してデバッグ・メッセージ・ロギングを有効にし、32767文字まで含むことができるレベル1のメッセージを表示する方法を示します。デバッグは明示的に有効になっており、このパラメータのデフォルト設定の無効よりも、この有効の設定のほうが優先されるため、p_enabled
パラメータを指定する必要はありません。
DECLARE l_msg VARCHAR2(32767) := 'Debug outputs anything up to varchar2 limit'; BEGIN APEX_DEBUG.ENABLE (p_level => 2); APEX_DEBUG.LOG_LONG_MESSAGE( p_message => l_msg, p_level => 1 ); END;
このプロシージャは、デバッグ・メッセージを記録します。
注意: このプロシージャのかわりに、「ERRORプロシージャ」、「WARNプロシージャ」、「MESSAGEプロシージャ」、「INFOプロシージャ」、「ENTERプロシージャ」または「TRACEプロシージャ」を使用します。 |
構文
APEX_DEBUG.LOG_MESSAGE ( p_message IN VARCHAR2 DEFAULT NULL, p_enabled IN BOOLEAN DEFAULT FALSE, p_level IN T_LOG_LEVEL DEFAULT C_LOG_LEVEL_APP_TRACE );
パラメータ
表7-6に、APEX_DEBUG.LOG_MESSAGE
プロシージャで使用可能なパラメータを示します。
表7-6 APEX_DEBUG.LOG_MESSAGEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
最大長が1000バイトのデバッグ・メッセージ。 |
|
ロギングが有効になっている(値がTRUEに設定されている)場合に、メッセージが記録されます。 |
|
ログ・メッセージのレベルを識別します(1は重要度が最も高く、9は重要度が最も低いログ・メッセージです)。これは整数値です。 |
例
次の例に、レベル1および2のメッセージに関してデバッグ・メッセージ・ロギングを有効にし、レベル1のメッセージと変数値を表示する方法を示します。デバッグは明示的に有効になっており、このパラメータのデフォルト設定の無効よりも、この有効の設定のほうが優先されるため、p_enabled
パラメータを指定する必要はありません。
DECLARE l_value varchar2(100) := 'test value'; BEGIN APEX_DEBUG.ENABLE (p_level => 2); APEX_DEBUG.LOG_MESSAGE( p_message => 'l_value = ' || l_value, p_level => 1 ); END;
このプロシージャは、セッションのアイテム値を記録します。
構文
APEX_DEBUG.LOG_PAGE_SESSION_STATE ( p_page_id IN NUMBER DEFAULT NULL, p_enabled IN BOOLEAN DEFAULT FALSE, p_level IN T_LOG_LEVEL DEFAULT C_LOG_LEVEL_APP_TRACE );
パラメータ
表7-7に、APEX_DEBUG.LOG_SESSION_STATE
プロシージャで使用可能なパラメータを示します。
表7-7 APEX_DEBUG.LOG_SESSION_STATEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
現在のアプリケーションとワークスペース・コンテキスト内のページを識別します。 |
|
ロギングが有効になっている(値がTRUEに設定されている)場合に、メッセージが記録されます。 |
|
ログ・メッセージのレベルを識別します(1は重要度が最も高く、9は重要度が最も低いログ・メッセージです)。整数値である必要があります。 |
例
次の例に、レベル1および2のメッセージに関してデバッグ・メッセージ・ロギングを有効にし、レベル1のメッセージをアプリケーションの現在のページのすべてのセッション・ステートを含めて表示する方法を示します。デバッグは明示的に有効になっており、このパラメータのデフォルト設定の無効よりも、この有効の設定のほうが優先されるため、p_enabled
パラメータを指定する必要はありません。また、この例ではアプリケーションの現在のページのセッション・ステート情報を示すだけであるため、p_page_id
を指定していません。
BEGIN APEX_DEBUG.ENABLE (p_level => 2); APEX_DEBUG.LOG_PAGE_SESSION_STATE (p_level => 1); END;
このプロシージャは、書式設定されたデバッグ・メッセージの一般バージョンを記録します。
構文
APEX_DEBUG.MESSAGE ( p_message IN VARCHAR2, p0 IN VARCHAR2 DEFAULT NULL, p1 IN VARCHAR2 DEFAULT NULL, p2 IN VARCHAR2 DEFAULT NULL, p3 IN VARCHAR2 DEFAULT NULL, p4 IN VARCHAR2 DEFAULT NULL, p5 IN VARCHAR2 DEFAULT NULL, p6 IN VARCHAR2 DEFAULT NULL, p7 IN VARCHAR2 DEFAULT NULL, p8 IN VARCHAR2 DEFAULT NULL, p9 IN VARCHAR2 DEFAULT NULL, p10 IN VARCHAR2 DEFAULT NULL, p11 IN VARCHAR2 DEFAULT NULL, p12 IN VARCHAR2 DEFAULT NULL, p13 IN VARCHAR2 DEFAULT NULL, p14 IN VARCHAR2 DEFAULT NULL, p15 IN VARCHAR2 DEFAULT NULL, p16 IN VARCHAR2 DEFAULT NULL, p17 IN VARCHAR2 DEFAULT NULL, p18 IN VARCHAR2 DEFAULT NULL, p19 IN VARCHAR2 DEFAULT NULL, p_max_length IN PLS_INTEGER DEFAULT 1000, p_level IN T_LOG_LEVEL DEFAULT C_LOG_LEVEL_INFO, p_force IN BOOLEAN DEFAULT FALSE );
パラメータ
表7-8に、APEX_DEBUG.MESSAGE
プロシージャで使用可能なパラメータを示します。
表7-8 APEX_DEBUG.MESSAGEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
デバッグ・メッセージ。'%s'の文字列は、 |
|
'%s'プレースホルダに対する置換文字列。 |
|
値 |
|
メッセージのデフォルトのログ・レベルは、 |
|
TRUEの場合は、ページがデバッグ・モードでレンダリングされない場合や(URLまたは有効なプロシージャを使用して)構成されたデバッグ・メッセージより |
例
次の例に、APEX_DEBUG.MESSAGE
プロシージャを使用して、デバッグ・ログにテキストを追加する方法を示します。
apex_debug.message('the value of %s + %s equals %s', 3, 5, 'eight');
このプロシージャを使用して、デバッグ・メッセージ・ログから、指定した日数よりも古いすべてのデータを削除します。
構文
APEX_DEBUG.REMOVE_DEBUG_BY_AGE ( p_application_id IN NUMBER, p_older_than_days IN NUMBER);
パラメータ
表7-9に、APEX_DEBUG.REMOVE_DEBUG_BY_AGE
プロシージャで使用可能なパラメータを示します。
表7-9 APEX_DEBUG.REMOVE_DEBUG_BY_AGEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
アプリケーションのアプリケーションID |
|
データが削除される前に、デバッグ・メッセージ・ログに保持される日数。 |
例
次の例に、現在のアプリケーションに関するデバッグ・メッセージで、保持日数が3日以上になるものを削除する方法を示します。
BEGIN APEX_DEBUG.REMOVE_DEBUG_BY_AGE ( p_application_id => TO_NUMBER(:APP_ID), p_older_than_days => 3 ); END;
このプロシージャを使用して、デバッグ・メッセージ・ログから、指定したアプリケーションに属するすべてのデータを削除します。
構文
APEX_DEBUG.REMOVE_DEBUG_BY_APP ( p_application_id IN NUMBER);
パラメータ
表7-10に、APEX_DEBUG.REMOVE_DEBUG_BY_APP
プロシージャで使用可能なパラメータを示します。
例
次の例に、現在のアプリケーションに関してログに記録されたすべてのデバッグ・メッセージを削除する方法を示します。
BEGIN APEX_DEBUG.REMOVE_DEBUG_BY_APP( p_application_id => TO_NUMBER(:APP_ID) ); END;
このプロシージャを使用して、メッセージ・ログから、指定したビューのすべてのデータを削除します。
構文
APEX_DEBUG.REMOVE_DEBUG_BY_VIEW ( p_application_id IN NUMBER, p_view_id IN NUMBER);
パラメータ
表7-11に、APEX_DEBUG.REMOVE_DEBUG_BY_VIEW
プロシージャで使用可能なパラメータを示します。
表7-11 APEX_DEBUG.REMOVE_DEBUG_BY_VIEWプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
アプリケーションのアプリケーションID |
|
ビューのビューID。 |
例
次の例に、現在のアプリケーションに属している、ビュー識別子が12345のデバッグ・メッセージを削除する方法を示します。
BEGIN APEX_DEBUG.REMOVE_DEBUG_BY_VIEW ( p_application_id => TO_NUMBER(:APP_ID), p_view_id => 12345 ); END;
このプロシージャでは、ワークスペース内の指定されたセッションがデフォルトで現在のセッションとなるため、デバッグ・メッセージ・ログからすべてのデータが削除されます。
構文
APEX_DEBUG.REMOVE_SESSION_MESSAGES ( p_session IN NUMBER DEFAULT NULL);
パラメータ
表7-12に、APEX_DEBUG.REMOVE_SESSION_MESSAGES
プロシージャで使用可能なパラメータを示します。
表7-12 APEX_DEBUG.REMOVE_SESSION_MESSAGESプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
セッションID。デフォルトの設定は現在のセッションです。 |
例
次の例に、現在のセッションでログに記録されたすべてのデバッグ・メッセージを削除する方法を示します。注意: p_session
パラメータの値が渡されないため、プロシージャではデフォルトで現在のセッションが使用されます。
BEGIN APEX_DEBUG.REMOVE_SESSION_MESSAGES(); END;
このプロシージャは、BOOLEANをVARCHAR2に変換します。
構文
APEX_DEBUG.TOCHAR ( p_value IN BOOLEAN ) return VARCHAR2;
パラメータ
表7-13に、APEX_DEBUG.TOCHAR
ファンクションで使用可能なパラメータを示します。
例
次の例に、APEX_DEBUG.TOCHAR
ファンクションを使用して、boolean
値を他のデバッグ・プロシージャに渡せるようvarchar2
に変換する方法を示します。
declare l_state boolean; begin .... apex_debug.info('Value of l_state is %s', apex_debug.tochar(l_state)); .... end;
このプロシージャは、c_log_level_app_trace
レベルのメッセージを記録します。記録は、デバッグ・モードがオフになっている場合も含め、常に行われます。
構文
APEX_DEBUG.TRACE ( p_message IN VARCHAR2, p0 IN VARCHAR2 DEFAULT NULL, p1 IN VARCHAR2 DEFAULT NULL, p2 IN VARCHAR2 DEFAULT NULL, p3 IN VARCHAR2 DEFAULT NULL, p4 IN VARCHAR2 DEFAULT NULL, p5 IN VARCHAR2 DEFAULT NULL, p6 IN VARCHAR2 DEFAULT NULL, p7 IN VARCHAR2 DEFAULT NULL, p8 IN VARCHAR2 DEFAULT NULL, p9 IN VARCHAR2 DEFAULT NULL, p_max_length IN PLS_INTEGER DEFAULT 1000 );
パラメータ
表7-14に、APEX_DEBUG.TRACE
プロシージャで使用可能なパラメータを示します。
表7-14 APEX_DEBUG.TRACEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
デバッグ・メッセージ。'%s'の文字列は、 |
|
'%s'プレースホルダに対する置換文字列。 |
|
値 |
例
次の例に、APEX_DEBUG.TRACE
を使用して、デバッグ・ログに低レベルのデバッグ情報を記録する方法を示します。
apex_debug.trace('Low-level information: %s+%s=%s', 1, 2, 3);
このプロシージャは、c_log_level_warn
レベルのメッセージを記録します。記録は、デバッグ・モードがオフになっている場合も含め、常に行われます。
構文
APEX_DEBUG.WARN ( p_message IN VARCHAR2, p0 IN VARCHAR2 DEFAULT NULL, p1 IN VARCHAR2 DEFAULT NULL, p2 IN VARCHAR2 DEFAULT NULL, p3 IN VARCHAR2 DEFAULT NULL, p4 IN VARCHAR2 DEFAULT NULL, p5 IN VARCHAR2 DEFAULT NULL, p6 IN VARCHAR2 DEFAULT NULL, p7 IN VARCHAR2 DEFAULT NULL, p8 IN VARCHAR2 DEFAULT NULL, p9 IN VARCHAR2 DEFAULT NULL, p_max_length IN PLS_INTEGER DEFAULT 1000 );
パラメータ
表7-15に、APEX_DEBUG.WARN
プロシージャで使用可能なパラメータを示します。
表7-15 APEX_DEBUG.WARNプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
デバッグ・メッセージ。'%s'の文字列は、 |
|
'%s'プレースホルダに対する置換文字列。 |
|
値 |
例
次の例に、APEX_DEBUG.WARN
を使用して、デバッグ・ログに非常に重要なデータを記録する方法を示します。
apex_debug.warn('Soft constraint %s violated: %s', 4711, sqlerrm);