プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle Reportsレポート作成のためのユーザーズ・ガイド
12c (12.2.1.2)
E82764-01
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次
索引へ移動
索引

前
前へ
 
次
次へ
 

4.14 レポートのデバッグ

この項では、レポートをデバッグする際に実行する可能性がある次のタスクの手順について説明します。

これらのタスクをサポートする概念的な情報は、第2.10項「デバッグ・ツール」を参照してください。

4.14.1 レポートのデバッグ

レポートをデバッグするには:

  1. レポートをデバッグ・モードで実行(次に説明)してレポート内の論理エラーをチェックし、レポート出力を表示する前に、実行時にこれらの論理エラーを警告として表示します。デバッグ・モードでのレポートの実行は、PL/SQLインタプリタを使用したレポートのデバッグと同じではありません。

  2. 問題の領域を特定したら、「ツール」→「PL/SQLインタプリタ」を選択してPL/SQLインタプリタを表示し、問題があるコードを特定の文番号の領域まで絞り込むために必要なデバッグ・アクションを作成します(第4.14.3項「ブレークポイントの設定」および第4.14.4項「デバッグ・トリガーの設定」を参照)。

  3. PL/SQLインタプリタを閉じてレポートを実行します。

  4. デバッグ・アクションを参照し、アプリケーション情報を評価します。

  5. 問題があるコードを特定の領域まで狭めたら、PL/SQLインタプリタを使用して可能なコード修正を実装およびテストします。

使用に関する注意

Oracle JDeveloperでJSPベースのWebレポートをデバッグするときは、指定したsourceタイプ以外のブレークポイントをすべて無効にする必要があります。ブレークポイントを無効にしないと、デッドロックが発生します。ソース・タイプ以外のブレークポイントは、「ブレークポイント」ウィンドウで無効にすることができます。

4.14.2 デバッグ・モードでのレポートの実行

デバッグ・モードでレポートをコンパイルおよび実行するには:

  1. 「編集」→「プリファレンス」を選択します。

  2. 「プリファレンス」ダイアログ・ボックスの「ランタイム設定」ページで、「デバッグ実行」を選択します。「OK」をクリックします。

  3. ツールバーの「ペーパー・レイアウトを実行」ボタンをクリックして、レポートを実行します。

コマンドラインからデバッグ・モードでレポートをコンパイルおよび実行するには:

  • rwbuilderまたはrwrunコマンドラインで、RUNDEBUG=YESと指定します。RUNDEBUGの詳細は、Oracle Reportsオンライン・ヘルプリファレンスのコマンドラインに関する項を参照してください。

使用に関する注意

デバッグ・モードでのレポートの実行は、レポートの論理エラーを調べる追加のランタイム・チェックを実行する場合に指定します。エラーではないが望ましくない出力となる可能性がある事項がチェックされ、レポート出力を表示する前に、実行時にそれらが警告として表示されます。デバッグ・モードでのレポートの実行は、PL/SQLインタプリタを使用したレポートのデバッグと同じではありません。

4.14.3 ブレークポイントの設定

レポートの実行にブレークポイントを設定するには:

  1. PL/SQLインタプリタが表示されていない場合は、「ツール」→「PL/SQLインタプリタ」を選択します。

  2. オブジェクト・ナビゲータで、コンパイル済のプログラム・ユニットのノードをクリックして、インタプリタの「ソース」ペインにプログラム・ユニットを表示します。


    注意:

    コンパイルされていないプログラム・ユニットには、名前の後にアスタリスク(*)が表示されます。

  3. ブレークポイントを作成する場所で実行可能文をダブルクリックします。実行可能文とは、条件制御、反復制御、順次制御およびエラー処理に使用されるPL/SQL構成体で、各PL/SQL文の最後には、必ずセミコロン(;)を付ける必要があります。


    ヒント:

    BEGIN、END、NULL文またはコメントにブレークポイントを置くことはできません。

    これにより、ブレークポイントが挿入され、B00nとして示されます。nはブレークポイントの番号です。プログラム・ユニットを実行すると、ブレークポイントの直前の行で実行が中断されます。

4.14.4 デバッグ・トリガーの設定

デバッグ・トリガーを設定するには:

  1. PL/SQLインタプリタが表示されていない場合は、「ツール」→「PL/SQLインタプリタ」を選択します。

  2. オブジェクト・ナビゲータで、コンパイル済のプログラム・ユニットのノードをクリックして、インタプリタの「ソース」ペインにプログラム・ユニットを表示します。


    注意:

    コンパイルされていないプログラム・ユニットには、名前の後にアスタリスク(*)が表示されます。

  3. ソース・ペインで、デバッグ・トリガーを作成する行を選択して、「プログラム」→「デバッグ・トリガー」を選択します(または、ソース・ペイン内を右クリックし、「トリガー」を選択します)。


    ヒント:

    BEGIN、END、NULL文またはコメントにブレークポイントを置くことはできません。

  4. 「PL/SQLトリガー」ダイアログ・ボックスで、トリガーを定義します。

    • 現行のプログラム・ユニットとは異なる位置でトリガーを起動する場合は、「位置」リストから位置を選択します。

    • 「トリガー本体」テキスト・ボックスに、デバッグ・トリガーを入力します。

      たとえば、ローカルNUMBER変数my_salが5000を超える場合にプログラムの実行を中断するデバッグ・トリガーを作成するには、トリガー本体として次のように入力します。

       IF Debug.Getn('my_sal') > 5000 THEN
        raise Debug.Suspend;
       END IF;
      

      注意:

      複数行のテキストを含むデバッグ・トリガーを作成するには、コードをBEGIN文とEND文で囲みます。

      この行の実行時にPL/SQLインタプリタを表示する場合は、DEBUGパッケージからDEBUG.SUSPEND例外を呼び出す必要があります。そうしないと、Oracle Reports Builderによってコードが暗黙に実行され、PL/SQLインタプリタは表示されません。

  5. 「OK」をクリックして、選択した行に対するデバッグ・トリガーを作成します。


    ヒント:

    「PL/SQLインタプリタ」ペインでコマンドを入力して、デバッグ・トリガーを作成することもできます。

4.14.5 デバッグ・アクションの参照

デバッグ・アクションを参照するには:

  • オブジェクト・ナビゲータで、デバッグ・アクション・ノードを開きます。オブジェクト・ナビゲータに、現行のレポートに関連付けられたデバッグ・アクションのリストが表示されます。

    または

  • PL/SQLインタプリタで、DESCRIBEコマンドを使用して特定のデバッグ・アクションに関する情報を表示します。

    たとえば、インタプリタ・ペインにDESCRIBE BREAK 1と入力すると、ブレークポイント1に関する次の情報が表示されます。

    Breakpoint: 1
    Program Unit: Procedure Body <programunit_name>
    Line: 3
    Enabled: YES
    

4.14.6 デバッグ・アクションの編集

デバッグ・アクションを編集するには:

  1. オブジェクト・ナビゲータで、デバッグ・アクション・ノードを開き、デバッグ・アクション・アイコンをダブルクリックして適切なダイアログ・ボックスを表示します。

  2. ダイアログ・ボックスで、デバッグ・アクションの内容またはプロパティを編集します。

  3. 「OK」をクリックします。

4.14.7 デバッグ・アクションの無効化と有効化

デバッグ・アクションを無効または有効にするには:

  • オブジェクト・ナビゲータのデバッグ・アクション・ノードで、目的のデバッグ・アクションを右クリックして、「有効化」または「無効化」を選択します。

    または

  • PL/SQLインタプリタで、ENABLEまたはDISABLEコマンドを使用して、特定のデバッグ・アクションを有効または無効にします。

    たとえば、インタプリタ・ペインに.DISABLE ACTION 1と入力すると、最初のデバッグ・アクションが無効になり、次のステータスが表示されます。

    Disabling debug action 1...
    

4.14.8 デバッグ・アクションの削除

デバッグ・アクションを削除するには:

  1. オブジェクト・ナビゲータで、デバッグ・アクション・ノードを開き、削除するアクションをクリックします。

  2. ツールバーの「削除」ボタンをクリックします。

4.14.9 PL/SQLインタプリタでのプログラム・ユニットの実行

PL/SQLインタプリタでプログラム・ユニットを実行するには:

  1. PL/SQLインタプリタが表示されていない場合は、「ツール」→「PL/SQLインタプリタ」を選択して表示します。

  2. インタプリタの「PL/SQL>」プロンプトで、プログラム・ユニットの名前を入力し、続けて文の終了を示すセミコロン(;)を入力します。プログラム・ユニットで引数が必要な場合は、引数をカッコで囲んで指定します。たとえば、getdata(SCOTT);です。

  3. [Enter]キーまたは[Return]キーを押すと、次のいずれかの結果になります。

    • プログラム・ユニットによって生成される出力は、すべてコマンドラインに表示されます。「PL/SQL>」プロンプトが再度表示されて、実行に成功したことを示します。

    • 2番目のプロンプトが表示されて(「+>」)、実行可能な文の入力が終了していないことを示します。文の終了を示すセミコロンを忘れた場合はここで入力し、[Enter]キーまたは[Return]キーを押します。それ以外の場合は、右クリックして新規プロンプトを選択します。

    • コマンドラインに実行時エラーが表示され、次に「PL/SQL>」プロンプトが表示されます。プログラム・ユニットを編集またはデバッグする必要があります。

    • プログラム・ユニットにブレークポイントまたはデバッグ・トリガーを設定した場合、実行が一時停止されて「(debug n)PL/SQL>」のような新しいプロンプトが表示されます。

使用に関する注意

前述のプログラム・ユニットの実行は、プロシージャ(またはパッケージ・プロシージャ)専用です。戻り値用の変数がないため、ファンクションには該当しません。

4.14.10 PL/SQLインタプリタへの「ナビゲータ」ペインの挿入

PL/SQLインタプリタに「オブジェクト・ナビゲータ」ペインを挿入するには:

  1. PL/SQLインタプリタが表示されていない場合は、「プログラム」→「PL/SQLインタプリタ」を選択します。

  2. PL/SQLインタプリタで、「表示」→「ナビゲータ・ペイン」を選択して、PL/SQLインタプリタの中央にオブジェクト・ナビゲータ・ペインを挿入します。

    ボタン・バーは、新しいオブジェクト・ナビゲータのボタンで更新されます。

  3. 必要に応じて、分割バーを使用して3つのペインのサイズを変更します。

4.14.11 プログラム・ユニットの実行の制御

プログラムの状態を検査して変更したら、次の機能を使用して実行を再開または終了できます。

表4-10 プログラム・ユニットの実行

実行機能 説明

STEP

STEPコマンドを使用して、中断されたプログラムの実行を一時的に再開できます。指定された一連の文が実行された後、制御はPL/SQLインタプリタに戻ります。STEP IntoまたはSTEP Overで、次の操作を実行できます。

次の文を実行します(必要に応じてサブプログラム・コールを実行します)。

現行のサブプログラムが戻るまで実行を再開します。

指定されたソースの位置に到達するまで実行を継続します。

GO

GOコマンドを使用して、プログラムの実行を無制限に再開します。つまり、現在実行している実行のスレッドが終了するか、デバッグ・アクションによって再度中断されるまで実行します。

RESET

RESETコマンドを使用して、現行のデバッグ・レベルで実行を継続せずに、デバッグ・レベルの外に制御を戻します。したがって、RESETは現行(またはより上位)での実行を効果的に中断します。

任意の以前のデバッグ・レベルに実行を明示的にリセットするか、デフォルトのトップ・レベルにリセットすることができます。


PL/SQLインタプリタのツールバーからか、「PL/SQLインタプリタ」ペインでコマンドを入力して、これらのコマンドを実行します。

4.14.12 コードのステップ・スルー

コードをステップ・スルーするには:

作業を始める前に、ブレークポイントなどのデバッグ・アクションを設定し、PL/SQLインタプリタの「PL/SQL>」プロンプトでプログラム・ユニットを実行して、実行を一時停止しておく必要があります。

一時停止されたプログラム・ユニットの次の行にステップ実行するには:

  • PL/SQLインタプリタのツールバーの「ステップ・イン」ボタンをクリックして、現行のプログラム・ユニットの実行可能コードの次の行を実行します。

    次の実行可能な行がネストされたサブプログラム(別のプログラム・ユニット内からコールされるプログラム・ユニット)へのコールである場合、ステップ・インではネストされたサブプログラムの最初の行で実行を停止します。

一時停止されたプログラム・ユニットでネストされたサブプログラムをステップ・オーバーするには:

  • PL/SQLインタプリタのツールバーの「ステップ・オーバー」ボタンをクリックします。

    ステップ・オーバーではネストされたサブプログラムへのあらゆるコールを実行し、現行のプログラム・ユニットの次の実行可能な行で実行を停止します。

ネストされたサブプログラムをステップ・アウトしてプログラム・ユニットの外に戻るには:

  • PL/SQLインタプリタのツールバーの「ステップ・アウト」ボタンをクリックします。

    ステップ・インを使用してネストされたサブプログラムを実行している場合、ステップ・アウトではネストされたサブプログラムの実行を完了し、元のプログラム・ユニットの次の行に戻ります。

プログラム・ユニットの実行を再開するには:

  • PL/SQLインタプリタのツールバーの「実行」ボタンをクリックします。

    プログラム・ユニットの実行は、プログラム・ユニットの実行が終了するまで、または別のデバッグ・アクションによって再度中断されるまで継続します。


    注意:

    デバッグ・アクションがPL/SQL LOOPに置かれている場合、「実行」を使用するとループを循環します。

現行のデバッグ・レベルで中断された実行を終了するには:

  • PL/SQLインタプリタのツールバーの「リセット」ボタンをクリックします。

    インタプリタまたはデバッグ・レベルの外(存在する場合)に制御が戻されます。

4.14.13 実行時におけるコードの変更

実行時にコードを変更するには:

  1. オブジェクト・ナビゲータで、目的のプログラム・ユニット、メニュー項目コマンドまたはトリガーをダブルクリックして、PL/SQLエディタを表示します。

  2. PL/SQLエディタで、必要な変更を加えます。

  3. 「コンパイル」「閉じる」の順にクリックして、PL/SQLエディタを取り消します。

  4. PL/SQLインタプリタのツールバーで、「実行」またはステップ・インステップ・オーバーあるいはステップ・アウトを選択し、プログラムの実行を再開します。

関連項目

第2.10.9項「実行時のコード変更について」

4.14.14 現行のスコープ位置の表示

現行のスコープ位置を表示するには:

  • オブジェクト・ナビゲータで、スタック・ノードを開き、スタック内の目的の枠を開いて、ローカルの変数とパラメータに関する情報を表示します。

    または

  • PL/SQLインタプリタで、「ソース」ペインを表示して現行のスコープ位置を表示します。

関連項目

第2.10.7項「現在のスコープ位置について」

4.14.15 ローカル変数のチェックまたは変更

ローカル変数の値をチェックまたは変更できるのは、PL/SQLインタプリタでプログラム・ユニットが一時停止されているときです。

ローカル変数の値をチェックするには:

  1. オブジェクト・ナビゲータで、スタック・ノードを開いてコール・スタックの枠を表示します。

  2. スタック・ノードで、チェックまたは変更する変数を含むプログラム・ユニットのノードをダブルクリックします。

    各ローカル変数は、現行の値で表示されます。

ローカル変数の値を編集するには:

  1. オブジェクト・ナビゲータで、スタック・ノードを開いてコール・スタックの枠を表示します。

  2. スタック・ノードで、チェックまたは変更する変数を含むプログラム・ユニットのノードをダブルクリックします。

    各ローカル変数は、現行の値で表示されます。

  3. オブジェクト・ナビゲータで、変数の値をクリックします。

  4. 変数の値を再度クリックして、編集モードに入ります。

  5. 変数の値を変更します。

  6. オブジェクト・ナビゲータの空白領域をクリックして編集モードを終了し、変更した値を受け入れます。

  7. PL/SQLインタプリタでプログラム・ユニットの実行を再開して、新しい値の効果をテストします。

4.14.16 アプリケーション変数の変更

変数を変更するには:

  1. オブジェクト・ナビゲータで、グローバル変数ノードまたはローカル変数のスタック・ノードを開きます。

  2. 目的のエントリを選択して開きます。オブジェクト・ナビゲータには、エントリに関連付けられている変数がすべて表示されます。

  3. 「=」の後にある既存の値をクリックし、必要な値を入力して値を編集します。

4.14.17 サブプログラム参照の表示

サブプログラム参照を表示するには:

  1. オブジェクト・ナビゲータで、目的のサブプログラムを選択して開きます。

  2. 「参照」ノードまたは「参照元」ノードを選択して開きます。

    オブジェクト・ナビゲータに、すべてのサブプログラム参照が表示されます。


    注意:

    「参照元」には、現行のプログラム・ユニットをコールするプログラム・ユニットが表示されます。「参照」には、現行のプログラム・ユニットによってコールされるプログラム・ユニットが表示されます。

4.14.18 レポートの実行のトレース

トレース・オプションを設定するには、次のいずれかの操作を行います。

  • 「プログラム」→「トレース」を選択し、「ランタイム・トレース設定」ダイアログ・ボックスに必要に応じて入力します。

  • ReportsToolsロギング構成ファイル(logging.xml)内の logger要素のlevel属性でトレース・レベルを設定します(oracle.reports.runtime)。

rwserverおよびrwservletのトレースなどの詳細は、『Oracle Reports ServicesレポートWeb公開ガイド』の「Oracle Reports Servicesの構成」および「Oracle Reportsの診断およびチューニング」の章を参照してください。

4.14.19 レポートの配布のトレース

レポートの配布をトレースするには:

  1. 「プログラム」→「トレース」を選択します。

  2. 「ランタイム・トレース設定」ダイアログ・ボックスで、トレース・ファイルの名前を「トレース・ファイル」フィールドに指定します。

  3. 「配布」チェック・ボックスを選択します。

  4. 「OK」をクリックします。

  5. レポートを実行します。

  6. テキスト・エディタを使用して、トレース・ファイルを開いて表示します。トレース・ファイルが空の場合、配布は正常に行われています。そうでない場合は、トレース・ファイルで配布エラーが識別されます。

関連項目

第2.8.3項「レポートの配布について」

第4.7.12項「複数の宛先へのレポートの配布」

4.14.20 SQL TRACEファンクションを使用したトレース

TRACEファンクションによって、解析されている正確な文が提供されます。文を解析した後は、SQL*Plusでその文の時間を計ることができ、データベースから取り出される見積り行数によって、時間を計算できます(常に同じ条件で比較します。つまり出力は画面ではなくファイルに送信します。SQL文をSQL*Plusに移す場合に、SQL文内の要素を変えないでください。WHERE句を少しでも変更すると、パフォーマンスに大きな差異が生じることがあります)。

レポートをトレースするには、次の2つの方法があります。

  • ユーザーレベル

  • システムレベル

必要な情報をより簡単に見つけることができるため、ユーザーレベルをお薦めします。SQL TRACEの詳細は、Oracle SQLリファレンスを参照してください。

4.14.20.1 ユーザーレベル・トレースの実行

  1. パフォーマンス・データが必要なレポートを開きます。

  2. 次の式を含むSQL-TRACEという名前のレポートレベルの式列を作成します。

    SRW.DO_SQL ('ALTER SESSION SET SQL_TRACE=TRUE');
    return(1); --Formulas must return a value.
    

    注意:

    Before FormトリガーからSQL TRACEをコールすることもできます。

  3. レポートを実行します。ORACLE_HOME/rdbms/log、またはinit.oraのパラメータUSER_DUMP_DESTで指定された宛先に、新規ファイルsome_number.trcが作成されます。(ファイルの日付スタンプは、どの.trcファイルが自分のものかの判別に役立ちます。)

  4. TKPROFコマンドを使用して、トレース出力ファイルをフォーマットします。

rwbuilderセッション中に2つ以上のトレースを発行する場合、トレース出力は1つのファイルに連結されます。

4.14.20.2 システムレベル・トレースの実行

  1. SQL_TRACE=TRUEおよびTIMED_STATISTICS=TRUEという文をinit.oraファイルに挿入します。

  2. データベースをシャットダウンしてから再起動します。


    注意:

    データベースとの相互作用がすべてトレースされるので、ORACLE_HOME/rdbms/logは非常に大きくなる可能性があります。