ヘッダーをスキップ

Oracle Reports レポート作成ガイド
10gリリース2(10.1.2)
B25068-01
目次
目次
索引
索引

戻る 次へ

40
REFカーソルを使用したペーパー・レポートの作成

この章では、PL/SQLデータ型REFカーソルを含むレポートについて説明します。この章の手順に従うと、図40-1に示すようなレポート出力を生成できます。

図40-1    REFカーソル・レポートの出力


画像の説明

概要

使用例

この例では、REFカーソルを使用して各部門における従業員とその職務上の地位に関する情報を表示する詳細なペーパー・レポートを作成する方法について説明します。データ・モデル・ビューを使用して複数問合せデータ・モデルを作成した後に、レポート・ウィザードを使用してレポート・レイアウトを作成します。データ・モデル・ビューで、詳細な調整を手動で行います。

このサンプル・レポートの作成過程では、次を行います。

REFカーソルを使用したサンプル・レポートを表示するには、サンプル・フォルダRefCursorを開き、result¥ref_emp68.rdfを開きます。このファイルの開き方の詳細は、「はじめに」の「サンプル・レポートへのアクセス」を参照してください。この章で使用されているサンプル・ファイルのリストと説明を表40-1に示します。

表40-1    レポートのサンプル・ファイル 
ファイル  説明 

Examples¥RefCursor¥result¥ref_emp*.rdf 

RDFの様々な段階。この章の各項を読み終わるたびにこのファイルを参照すると参考になります。ファイルref_emp68.rdfが最終的なレポートです。 

Examples¥RefCursor¥scripts¥refcursor_code.txt 

この章で作成するPL/SQLコード。このファイルを基準として、作成したコードが正しいことを確認するか、単にこのファイルからコードをコピーしてReports Builderに貼り付けます。 

40.1 この例の前提条件

この章のサンプルを作成するには、提供されたサンプル・ファイルと、Oracleデータベースで提供されるHuman Resourcesサンプル・スキーマ(HR)へのアクセスが必要です。このサンプル・スキーマに対するアクセス権の有無が不明のときは、データベース管理者に問い合せてください。

40.2 REFカーソル型の定義

REFカーソル問合せを作成するには、まず、REFカーソルを定義するパッケージ仕様部を作成します。その後で、REFカーソルを使用する問合せを作成します。この項の手順では、REFカーソルを定義するパッケージ仕様部を作成します。

REFカーソル型を定義するには:

  1. Reports Builderを起動します。すでに起動している場合は、「ファイル」→「新規」→「レポート」を選択します。

  2. 「ようこそ」ダイアログ・ボックスまたは「新規レポート」ダイアログ・ボックスで、「新規レポートを手動で作成」を選択して「OK」をクリックします。

  3. オブジェクト・ナビゲータで、新しいレポート・ノード(MODULEx)の下の「プログラム・ユニット」ノードをクリックします。

  4. ツールバーで「作成」ボタンをクリックして、「新規プログラム・ユニット」ダイアログ・ボックスを表示します。

  5. 「新規プログラム・ユニット」ダイアログ・ボックスで、「名前」フィールドにconcl_cvと入力します。

  6. 「パッケージ仕様部」を選択し、「OK」をクリックしてPL/SQLエディタを表示します。

  7. PL/SQLエディタで、テンプレートを使用して次のPL/SQLコードを入力します。

    PACKAGE concl_cv IS
        type conclass_rec is RECORD
           (EMPLOYEE_ID NUMBER(6),
         FIRST_NAME VARCHAR2(20),
         LAST_NAME VARCHAR2(25),
         EMAIL VARCHAR2(25),
         PHONE_NUMBER VARCHAR2(20),
         HIRE_DATE DATE,
         JOB_ID VARCHAR2(10),
         SALARY NUMBER(8,2),
         DEPARTMENT_ID NUMBER(4));
        type conclass_refcur is REF CURSOR return conclass_rec;
    END;
    
    

    このパッケージ仕様部では、次の2つのことを行います。

  8. 「コンパイル」をクリックします。

  9. コンパイル・エラーが発生した場合は、構文エラーのコードをチェックして必要に応じてコンパイルを再実行します。

  10. 「閉じる」をクリックします。

  11. 手順3〜8を繰り返して、さらに次の2つのパッケージ仕様部を作成します。

  12. 「ファイル」→「別名保存」を選択します。このレポートにref61_<自分のイニシャル>.rdfという名前を付けて、任意のディレクトリに保存します。


    注意

    レポートの設計段階では、レポートを異なるファイル名で頻繁に保存することをお薦めします。そうすれば、エラーが生じたり、変更した内容に問題がある場合でも、前に保存したファイルに簡単に戻ることができるので、その時点からの修正を加えるだけで済みます。 


40.3 REFカーソル問合せの作成

REFカーソルを定義するパッケージ仕様部を作成したら、この項で説明する手順に従い問合せを定義できます。

REFカーソル問合せを作成するには:

  1. オブジェクト・ナビゲータで、「データ・モデル」ノードの横のビュー・アイコンをダブルクリックして、データ・モデル・ビューを表示します。

  2. データ・モデル・ビューで、ツール・パレットの「REFカーソル問合せ」ツールをクリックします。

  3. データ・モデル・ビューの空き領域をクリックして、新しいREFカーソル問合せのPL/SQLエディタを表示します。

  4. PL/SQLエディタで、テンプレートを使用して次のPL/SQLコードを入力します。

    function q_portdescRefCurDS return port_cv.portdesc_refcur is temp_portdesc port_
    cv.portdesc_refcur;
    begin
    open temp_portdesc for select department_id, department_name from
    departments;
      return temp_portdesc;
    end;
    
    


    注意

    ファイルExamples/RefCursor/scripts/refcursor_code.txtを開き、そのコードをコピーしてPL/SQLエディタに貼り付けることができます。 


  5. 「コンパイル」をクリックします。

  6. コンパイル・エラーが発生した場合は、構文エラーのコードをチェックして必要に応じてコンパイルを再実行します。

  7. 「閉じる」をクリックします。

  8. データ・モデル・ビューで、新しいREFカーソル問合せオブジェクト(QR_1)をダブルクリックして、プロパティ・インスペクタを表示します。

  9. 前述の手順を繰り返して、さらに次の2つの問合せを作成します。

    データ・モデルは次のようになります。

    図40-3    3つの問合せを持つデータ・モデル


    画像の説明

  10. レポートをref_62_<自分のイニシャル>.rdfという名前で保存します。


    注意

    提供されているファイルExamples/RefCursor/result/ref_emp62.rdfを開き、データ・モデルを表示して作成結果と比較できます。 


40.4 データ・モデルの調整

この項では、データ・モデル内の一部のオブジェクトの名前を変更して、オブジェクトに意味のある名前を指定します。また、ブレーク・グループも作成します。

データ・モデルを調整するには:

  1. データ・モデル・ビューで、グループ「G_EMPLOYEE_ID」のタイトル・バーを約4インチ(10cm)下にドラッグしてグループ全体を移動します。

  2. 「JOB_ID」という名前の列をクリックし、そのまま「G_EMPLOYEE_ID」の外側上部までドラッグして新規のブレーク・グループを作成します。次の図を参照してください。

    図40-4    グループを持つ問合せ


    画像の説明

  3. JOB_IDを含む新規グループのタイトル・バーをダブルクリックして、プロパティ・インスペクタを表示し、次のプロパティを設定します。

    • 「一般情報」で、「名前」プロパティを「G_conlabel」に設定します。

  4. データ・モデル・ビューにおいて、データ・モデルは次のようになります。

    図40-5    グループを持つデータ・モデル


    画像の説明


    注意

    提供されているファイルExamples/RefCursor/result/ref_emp63.rdfを開き、データ・モデルを表示して作成結果と比較できます。 


  5. レポートをref_63_<自分のイニシャル>.rdfという名前で保存します。

40.5 REFカーソル問合せ間のリンクの作成

現時点では、作成した問合せの間に関連性はありません。問合せ間にリレーションシップを構築するには、グループ間データ・リンクを作成する必要があります。この項の手順では、リンクを作成します。

REFカーソル問合せ間にリンクを作成するには:

  1. データ・モデル・ビューで、ツール・パレットの「データ・リンク」ツールをクリックします。

  2. 「G_DEPARTMENT_ID」のタイトル・バーをクリックし、そのまま「G_EMPLOYEE_ID」のタイトル・バーまでリンクをドラッグします。

  3. 「q_container」をダブルクリックして、PL/SQLエディタを表示します。

  4. PL/SQLエディタで、SELECT文のWHERE句にコードを追加して、主キーおよび外部キーとして使用する列を指定します。

    from job_historyの後に次のコードを追加します。

    where :department_id = department_id;
    
    

    セミコロン(;)の前にWHERE句があることを確認します。

    :department_idは、G_DEPARTMENT_IDDEPARTMENT_IDを参照するバインド変数であることに注意してください。

  5. 「コンパイル」をクリックします。

  6. コンパイル・エラーが発生した場合は、構文エラーのコードをチェックして必要に応じてコンパイルを再実行します。

  7. 「閉じる」をクリックします。

  8. データ・モデル・ビューで、ツール・パレットの「データ・リンク」ツールをクリックします。

  9. 「G_EMPLOYEE_ID」のタイトル・バーをクリックし、「G_EMPLOYEE_ID1」のタイトル・バーまでリンクをドラッグします。

  10. 「q_conclass」をダブルクリックして、PL/SQLエディタを表示します。

  11. PL/SQLエディタでSELECT文にWHERE句を追加します。

    カーソルをFROM EMPLOYEESとセミコロン(;)の間に挿入し、[Enter]または[Return]を押して新しい行を作成します。その後、次のコードを追加します。

    where :employee_id = employee_id;
    
    

    セミコロン(;)の前にWHERE句があることを確認します。

    :employee_idは、G_EMPLOYEE_IDEMPLOYEE_ID列を参照するバインド変数であることに注意してください。

  12. 「コンパイル」をクリックします。

  13. コンパイル・エラーが発生した場合は、構文エラーのコードをチェックして必要に応じてコンパイルを再実行します。

  14. 「閉じる」をクリックします。

  15. データ・モデルは次のようになります。

    図40-6    リンクを持つデータ・モデル


    画像の説明


    注意

    提供されているファイルExamples/RefCursor/result/ref_emp64.rdfを開き、データ・モデルを表示して作成結果と比較できます。 


  16. レポートをref_64_<自分のイニシャル>.rdfという名前で保存します。

40.6 サマリー列の追加

現在、問合せが完成しリンクが作成されています。この項の手順では、データを集計する列を作成します。

サマリー列を追加するには:

  1. データ・モデル・ビューで、ツール・パレットの「サマリー列」ツールをクリックします。

  2. 「G_EMPLOYEE_ID」グループの内側をクリックして、サマリー列を作成します。

  3. 新しいサマリー列オブジェクト(CS_1)をダブルクリックしてプロパティ・インスペクタを表示し、次のプロパティを設定します。

    • 「一般情報」で、「名前」プロパティを「CS_classcount」に設定します。

    • 「サマリー」で、「ファンクション」プロパティを「カウント」、「ソース」プロパティを「employee_id」、および「リセット位置」プロパティを「G_department_id」に設定します。

    これで、従業員数をカウントするサマリーが作成されました。レポートのレイアウト内ではサマリーを使用しませんが、後で他に対するソースとしてサマリーを使用します。

  4. 前述の手順を繰り返して、次の特性を持つサマリーを作成します。

    表40-2    サマリーの特性 
    作成グループ  名前  ファンクション  ソース  リセット位置 

    G_conlabel 

    CS_conlabel_classcount 

    合計 

    CS_classcount 

    G_conlabel 

    G_department_id 

    CS_port_count 

    合計 

    CS_conlabel_classcount 

    G_DEPARTMENT_ID 

    これらのサマリーについてはまだ学習していません。これらのサマリーの目的は、レポート・レイアウトを作成してライブ・データをプレビューするときに説明します。

    データ・モデルは次のようになります。

    図40-7    サマリー列を持つデータ・モデル


    画像の説明


    注意

    作成結果を、提供されているファイルref_emp65.rdfと比較することもできます。 


  5. レポートをref_65_<自分のイニシャル>.rdfという名前で保存します。

40.7 レイアウトの作成

作業データ・モデルはすでにあるので、この項の手順ではレイアウトを作成します。

ペーパー・レイアウトを作成するには:

  1. オブジェクト・ナビゲータで、レポート名を右クリックして「レポート・ウィザード」を選択します。

  2. レポート・ウィザードの「レポート・タイプ」ページで、「ペーパー・レイアウトのみ作成」を選択します。

  3. 「スタイル」ページで、「タイトル」フィールドにMy Employeesと入力して、「グループ上」を選択します。

  4. 「グループ」ページで、「使用可能フィールド」リストで次のフィールドをクリックし、「下」をクリックして、印刷方向を指定してこれらのフィールドを「グループ・フィールド」リストに移動します。

    • G_conlabel

    • G_DEPARTMENT_ID

    • G_EMPLOYEE_ID

  5. 「フィールド」ページで、次のフィールドをクリックしてから「>」ボタンをクリックし、それらのフィールドを「表示フィールド」リストに移動します。

    • DEPARTMENT_NAME

    • EMPLOYEE_ID

    • START_DATE

    • END_DATE

    • JOB_ID

    • CS_port_count

  6. 「ラベル」ページで、ラベルとフィールド幅を次のように変更します。

    表40-3    「ラベル」ページのフィールドの説明 
    フィールド  ラベル   

    DEPARTMENT_NAME 

    Department 

    30 

    EMPLOYEE_ID 

    Employee ID 

    8 

    START_DATE 

    Start Date 

    9 

    END_DATE 

    End Date 

    9 

    JOB_ID 

    Job ID 

    10 

    CS_port_count 

    Total: 

    12 

  7. 「テンプレート」ページで、「事前定義テンプレート」を選択し、「Beige」をクリックします。次に「終了」をクリックして、ペーパー・デザイン・ビューにレポート出力を表示します。表示は次のようになります。

    図40-8    REFカーソル・レポートのペーパー・デザイン・ビュー


    画像の説明


    注意

    提供されているファイルExamples/RefCursor/result/ref_emp66.rdfを開き、ペーパー・デザイン・ビューを表示して、作成結果と比較できます。 


  8. レポートをref_66_<自分のイニシャル>.rdfという名前で保存します。

40.8 パッケージへのSELECT文の移動

現行のレポート構成では、REFカーソル問合せによって使用されるSELECT文はレポート内に置かれています。多くの場合、REFカーソル型を定義するパッケージ内にSELECT文を配置しておくと有利です。これにより、同じSELECT文を使用するレポートそれぞれにSELECT文を直接入力しなくても、パッケージを簡単に参照できるようになります。SELECT文を変更(たとえば、句を修正または追加)する必要がある場合は、パッケージ内でSELECT文を1回更新するのみです。各レポートで更新する必要はありません。

この項の手順では、REFカーソル型を定義するパッケージにSELECT文を移動します。

SELECT文をパッケージに移動するには:

  1. オブジェクト・ナビゲータで、レポートの「プログラム・ユニット」ノードをクリックします。

  2. ツールバーで「作成」ボタンをクリックして、「新規プログラム・ユニット」ダイアログ・ボックスを表示します。

  3. 「新規プログラム・ユニット」ダイアログ・ボックスで、「名前」フィールドにconcl_cvと入力します。

  4. 「パッケージ本体」を選択し、「OK」をクリックして新しいプログラム・ユニットのPL/SQLエディタを表示します。

  5. PL/SQLエディタで、テンプレートを使用して次のPL/SQLコードを入力します。

    PACKAGE BODY cont_cv IS
         function query_container (p_department_id number)
         return container_refcur is tempcv_container cont_cv.container_
         refcur;
    begin
      open tempcv_container for
      select employee_id,
      start_date,
      end_date,
      job_id,
      department_id
      from job_history
      where  :department_id=department_id;
      return tempcv_container;
    end;                             
    END;
    
    


    注意

    提供されているファイルExamples/RefCursor/scripts/refcursor_code.txtを開き、そのコードをコピーしてReports Builderに貼り付けることができます。 


  6. 「コンパイル」をクリックします。

  7. コンパイル・エラーが発生した場合は、構文エラーのコードをチェックして必要に応じてコンパイルを再実行します。

  8. 「閉じる」をクリックします。

  9. これでファンクションが定義されました。このファンクションをパッケージ仕様部に追加して、参照できるようにします。他のプログラム・ユニットがパッケージ本体内のファンクションを認識するのは、パッケージ仕様部にファンクションが記述されている場合のみです。

  10. オブジェクト・ナビゲータで、「CONT_CV(パッケージ仕様部)」オブジェクトをダブルクリックしてPL/SQLエディタを表示します。

  11. PL/SQLエディタで、END;文の上に次の行を入力します。

    function query_container (p_department_id number) return container_refcur;
    
    
  12. 「閉じる」をクリックします。

  13. 「プログラム」→「コンパイル」→「すべて」を選択します。

  14. 終了したら、「OK」をクリックします。

  15. オブジェクト・ナビゲータの「プログラム・ユニット」ノードで、「Q_CONTAINERREFCURDS」オブジェクトをダブルクリックしてPL/SQLエディタを表示します。

  16. PL/SQLエディタで、コードを次のように編集します。

    function Q_containerRefCurDS return cont_cv.container_refcur is
        temp_container cont_cv.container_refcur;
    begin
         temp_container:=cont_cv.query_container (:department_id);
           return temp_container;
    end;
    
    

    終了すると、問合せのロジックはすべて、query_containerという名前のファンクション内に置かれます。これ以降query_containerを変更するときは、この問合せおよびこの問合せを参照するその他の問合せを変更します。


    注意

    ファイルExamples/RefCursor/scripts/refcursor_code.txtを開き、そのコードをコピーしてReports Builderに貼り付けることができます。 


  17. 「コンパイル」をクリックします。

  18. コンパイル・エラーが発生した場合は、構文エラーのコードをチェックして必要に応じてコンパイルを再実行します。

  19. 「閉じる」をクリックします。

  20. ツールバーの「ペーパー・デザイン」ボタンをクリックして、ペーパー・デザイン・ビューにレポートを表示します。

  21. レポートをref_67_<自分のイニシャル>.rdfという名前で保存します。

演習(オプション):

レポート内の他の2つの問合せについても、前述の手順を繰り返します。

40.9 ライブラリへのパッケージの移動

同一のREFカーソル型およびSELECT文を使用する多数のレポートが存在する場合は、ファイルに格納されているPL/SQLライブラリ内に作成したプログラム・ユニットを移動することにより、別のレポートでコードを容易に共有できます。この項の手順では、プログラム・ユニットをPL/SQLライブラリに移動します。

パッケージをライブラリに移動するには:
  1. オブジェクト・ナビゲータで、「PL/SQLライブラリ」ノードをクリックし、ツールバーの「作成」ボタンをクリックして新しいライブラリを追加します。

  2. 「ファイル」→「別名保存」を選択します。

  3. DEPT_CONTAINERをライブラリとして入力します。

  4. 「ファイルシステム」が選択されていることを確認します。

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

  6. 次に示すレポートのプログラム・ユニットを、新規に作成したDEPT_CONTAINERライブラリの「プログラム・ユニット」ノードにドラッグ・アンド・ドロップします。

    • CONCL_CV(パッケージ仕様部)

    • CONT_CV(パッケージ仕様部)

    • CONT_CV(パッケージ本体)

    • PORT_CV(パッケージ本体)

  7. DEPT_CONTAINERを保存します。

  8. ペーパー・デザイン・ビューが開いている場合は、閉じてください。

  9. オブジェクト・ナビゲータで、レポートの「プログラム・ユニット」ノードの下にあるCONCL_CV(パッケージ仕様部)、CONT_CV(パッケージ仕様部)、CONT_CV(パッケージ本体)およびPORT_CV(パッケージ本体)を削除します。


    注意

    レポートからパッケージを削除するときにペーパー・デザイン・ビューが開いていると、エラーが発生する場合があります。 


  10. レポートの「連結ライブラリ」ノードをクリックし、ツールバーの「作成」ボタンをクリックして新しい連結ライブラリを追加します。

  11. 「参照」をクリックしてDEPT_CONTAINERライブラリを検索します。このライブラリのファイル拡張子は、.pllです。DEPT_CONTAINERを見つけて選択し、「開く」をクリックします。

  12. 「連結」をクリックします。

  13. 「プログラム」→「コンパイル」→「すべて」を選択します。

  14. 「OK」をクリックして「コンパイル」ウィンドウを閉じます。

  15. ツールバーの「ペーパー・レイアウトを実行」ボタンをクリックして、レポートを実行し、ペーパー・デザイン・ビューにレポートを表示します。

  16. レポートをref_68_<自分のイニシャル>.rdfという名前で保存します。

40.10 まとめ

これで、すべての作業が完了しました。REFカーソル問合せのサンプル・レポートが完成しました。この章で学習した内容は次のとおりです。

このサンプルで使用するウィザード、ビューまたはプロパティの詳細は、Oracle Reportsオンライン・ヘルプを参照してください。このヘルプは、第3.1.1項「Oracle Reportsオンライン・ヘルプの使用」で説明しているとおり、Reports Builder、またはOracle Technology Network(OTN)から表示できます。


戻る 次へ
Oracle
Copyright © 2003, 2005 Oracle.

All Rights Reserved.
目次
目次
索引
索引