ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Reportsレポート作成のためのユーザーズ・ガイド
11gリリース1(11.1.1)
B61376-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レポートをデバッグするときは、ソース・タイプ以外のすべてのブレークポイントを無効にする必要があります。ブレークポイントを無効にしないと、デッドロックが発生します。ソース・タイプ以外のブレークポイントは、「ブレークポイント」ウィンドウで無効にすることができます。

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が5,000を超える場合にプログラムの実行を中断するデバッグ・トリガーを作成するには、トリガー本体として次のように入力します。

       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 Fusion Middleware Oracle Reports ServicesレポートWeb公開ガイド』の「OracleAS 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に移動させるときに変更を加えないでください。WHERE句にわずかな変更を加えるだけで、パフォーマンスが大きく異なる場合があります)。

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

  • ユーザーレベル

  • システムレベル

必要な情報をより簡単に見つけることができるため、ユーザーレベルをお薦めします。SQL TRACEの詳細は、『Oracle Database 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. レポートを実行します。some_number.trcという新しいファイルが、ORACLE_HOME/rdbms/log、またはinit.oraファイルのパラメータUSER_DUMP_DESTで指定されている場所に作成されます(ファイルの日付スタンプによって、どの.trcファイルが自分のファイルであるかを判別できます)。

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

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

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

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

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


    注意:

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