APEX_DEBUG
パッケージには、デバッグ・メッセージ・ログを管理するためのユーティリティ・ファンクションが用意されています。具体的には、このパッケージには、Application Expressアプリケーションに含まれるPL/SQLコードおよびデータベース・ストアド・プロシージャとファンクション内のPL/SQLコードのインスツルメントおよびデバッグに必要なAPIが提供されています。PL/SQLコードをインストルメントすると、より迅速にバグを追跡し、予期しない動作を特定することが容易になります。
パッケージには、様々なデバッグ・レベルでのデバッグを有効または無効にする手段、およびメッセージ・ログをクリーンアップするユーティリティ・プロシージャもあります。
『Oracle Application Expressアプリケーション・ビルダー・ユーザーズ・ガイド』のデバッグ・モードへのアクセスに関する説明を参照するか、またはAPEX_DEBUGビューを問い合せることによって、メッセージ・ログを表示できます。
詳細は、個々のAPIの説明を参照してください。
注意: Oracle Application Express 4.2では、APEX_DEBUG_MESSAGEパッケージの名前がAPEX_DEBUGに変更されました。APEX_DEBUG_MESSAGEのパッケージ名は下位互換性のためにサポートされます。ただし、Oracle Application Expressの旧バージョンでAPIを実行する場合を除き、新規アプリケーションでは新しい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 (e.g. 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
このプロシージャは、デバッグ・メッセージを無効にします。
構文
APEX_DEBUG.DISABLE;
パラメータ
なし。
例
次の例に、デバッグ・メッセージを無効にする方法を示します。
BEGIN APEX_DEBUG.DISABLE(); END;
このプロシージャは、デバッグ・メッセージを有効にします。重要性のレベルごとに、監視されるデバッグ・メッセージのタイプを指定できます。
注意: 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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
p_routine_name |
プロシージャまたはファンクションの名前。 |
|
プロシージャまたはファンクションのパラメータ名と値。 |
p_value_max_length |
|
例
次の例に、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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
p_message |
デバッグ・メッセージ。 |
|
「%s」プレースホルダの置換文字列。 |
p_max_length |
|
例
次の例に、クリティカル・エラーをデバッグ・ログに記録するための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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
p_message |
デバッグ・メッセージ。'%s'の文字列は、 |
|
'%s'プレースホルダに対する置換文字列。 |
p_max_length |
値 |
例
次の例に、情報をデバッグ・ログに記録するためのAPEX_DEBUG.INFO
の使用方法を示します。
apex_debug.info('Important: %s', 'fnord');
このプロシージャは、dbms_output.get_lines
のコンテンツをデバッグ・ログに書き込みます。dbms_output
を使用するレガシー・アプリケーションのメッセージは、デバッグ・ログにコピーされます。
構文
APEX_DEBUG.LOG_DBMS_OUTPUT;
パラメータ
なし。
例
次の例に、DBMS_OUTPUT
バッファのコンテンツをデバッグ・ログに記録する方法を示します。
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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
p_message |
最大長が1000バイトのデバッグ・メッセージ。 |
p_enabled |
ロギングが有効な場合(値をTRUEに設定するとロギングが有効化)にメッセージを記録します。 |
p_level |
ログ・メッセージのレベルを指定します(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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
p_page_id |
現行のアプリケーションとワークスペースのコンテキスト内のページを指定します。 |
p_enabled |
ロギングが有効になっている(値がTRUEに設定されている)場合に、メッセージが記録されます。 |
p_level |
ログ・メッセージのレベルを指定します(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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
p_message |
デバッグ・メッセージ。 |
|
'%s'プレースホルダに対する置換文字列。 |
p_max_length |
|
p_level |
メッセージのログ・レベルのデフォルトは |
p_force |
TRUEの場合、ページがデバッグ・モードでレンダリングされない場合または |
例
次の例に、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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
p_application_id |
アプリケーションのアプリケーションID |
p_older_than_days |
データが削除される前に、デバッグ・メッセージ・ログに保持される日数。 |
例
次の例に、現在のアプリケーションに関するデバッグ・メッセージで、保持日数が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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
p_session |
セッション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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
p_message |
デバッグ・メッセージ。'%s'の文字列は、 |
|
'%s'プレースホルダに対する置換文字列。 |
p_max_length |
値 |
例
次の例に、低レベルのデバッグ情報をデバッグ・ログに記録するための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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
p_message |
デバッグ・メッセージ。'%s'の文字列は、 |
|
'%s'プレースホルダに対する置換文字列。 |
p_max_length |
値 |
例
次の例に、きわめて重要なデータをデバッグ・ログに記録するためのAPEX_DEBUG.WARN
の使用方法を示します。
apex_debug.warn('Soft constraint %s violated: %s', 4711, sqlerrm);