ページとは、画面に表示される1画面全体の情報、またはスプールされる(印刷される)レポートの1ページを指します。各ページの上部タイトルおよび下部タイトルの配置、1ページごとの行数の設定、および各行の幅の設定ができます。
レポートとは、問合せの結果全体を指します。それぞれのレポートにヘッダーおよびフッターを配置し、それらの書式をページの上部タイトルおよび下部タイトルと同じ方法で設定できます。
前述のとおり、レポートの各ページの一番上に表示するタイトルを設定できます。また、各ページの一番下に表示するタイトルも設定できます。TTITLEコマンドで上部タイトルを定義し、BTITLEコマンドで下部タイトルを定義します。
それぞれのレポートにヘッダーおよびフッターを設定することもできます。REPHEADERコマンドでレポート・ヘッダーを定義し、REPFOOTERコマンドでレポート・フッターを定義します。
TTITLE、BTITLE、REPHEADERまたはREPFOOTERコマンドでは、コマンド名の後に、位置または書式を指定する1つ以上の句を指定し、その後に、その位置に指定するCHAR値またはその書式を設定するCHAR値を指定します。次のように、複数の句およびCHAR値のセットを挿入できます。
TTITLE position_clause(s) char_value position_clause(s) char_value ... BTITLE position_clause(s) char_value position_clause(s) char_value ... REPHEADER position_clause(s) char_value position_clause(s) char_value ... REPFOOTER position_clause(s) char_value position_clause(s) char_value ...
すべてのTTITLE、BTITLE、REPHEADERおよびREPFOOTER句の詳細は、「TTITLE」コマンドおよび「REPHEADER」コマンドを参照してください。
ACME SALES DEPARTMENT PERSONNEL REPORT DEPARTMENT_ID LAST_NAME SALARY ------------- ------------------------- ---------- 30 Colmenares 2500 30 Himuro 2600 30 Tobias 2800 30 Baida 2900 30 Khoo 3100 30 Raphaely 11000 COMPANY CONFIDENTIAL 6 rows selected.
ACME SALES DEPARTMENT PERSONNEL REPORT PERFECT WIDGETS COMPANY CONFIDENTIAL ACME SALES DEPARTMENT PERSONNEL REPORT DEPARTMENT_ID LAST_NAME SALARY ------------- ------------------------- ---------- 30 Colmenares 2500 30 Himuro 2600 30 Tobias 2800 30 Baida 2900 30 Khoo 3100 30 Raphaely 11000 COMPANY CONFIDENTIAL 6 rows selected.
レポート・ヘッダーの定義を変更せずに非表示にするには、次のように入力します。
REPHEADER OFF
例6-18 ページの上部タイトルおよび下部タイトルの配置
レポートの各ページの一番上および一番下にタイトルを挿入するには、次のように入力します。
TTITLE CENTER - "ACME SALES DEPARTMENT PERSONNEL REPORT" BTITLE CENTER "COMPANY CONFIDENTIAL"
この時点で、次のように現行の問合せを実行します。
/
例6-19 レポートのヘッダーの配置
個々のページにレポート・ヘッダーを中央揃えで配置するには、次のように入力します。
REPHEADER PAGE CENTER 'PERFECT WIDGETS'
この時点で、次のように現行の問合せを実行します。
/
次に示す2ページの出力が表示され、最初のページには新しく設定したREPHEADERが表示されます。
前の例に示したレポートは、会社名をさらに強調し、個別の行の両端にレポートの種類および部門名を配置するとさらに体裁が良くなります。また、行サイズを小さくして、タイトルをデータの近くに中央揃えに配置するのも効果的です。
これらの変更を加えるには、次の例に示すように、TTITLEコマンドにいくつかの句を追加し、システム変数LINESIZEをリセットします。
レポートのヘッダーおよびフッターは、REPHEADERコマンドおよびREPFOOTERコマンドを使用してBTITLEおよびTTITLEと同じ方法で書式を設定できます。
A C M E W I D G E T ==================== PERSONNEL REPORT SALES DEPARTMENT DEPARTMENT_ID LAST_NAME SALARY ------------- ------------------------- ---------- 30 Colmenares 2500 30 Himuro 2600 30 Tobias 2800 30 Baida 2900 30 Khoo 3100 30 Raphaely 11000 COMPANY CONFIDENTIAL 6 rows selected.
LEFT、RIGHTおよびCENTER句を使用して、後続の値を行の始め、終わりおよび中央に配置します。1行以上、下へ移動するには、SKIP句を使用します。
結果の最後の行と下部タイトルの間に空白がなくなっていることに注意してください。下部タイトルの最終行は、ページの最終行に表示されます。レポートの最終行から下部タイトルまでの空白の量は、ページ全体のサイズ、上部タイトルが占める行数、そのページ内の行数によって決まります。この例の上部タイトルは、その前の例で示した上部タイトルより3行多く行数をとります。1ページごとの行数の設定方法は、この章の後半で説明します。
下部タイトルの前にn行の空白行を常に出力するには、BTITLEコマンドの先頭にSKIP n句を使用します。たとえば、この例で下部タイトルの前で1行スキップするには、次のコマンドを入力します。
BTITLE SKIP 1 CENTER 'COMPANY CONFIDENTIAL'
例6-20 タイトル要素の位置決定
上部タイトルの位置を設定しなおして人事レポートを再表示するには、次のコマンドを入力します。
TTITLE CENTER 'A C M E W I D G E T' SKIP 1 - CENTER ==================== SKIP 1 LEFT 'PERSONNEL REPORT' - RIGHT 'SALES DEPARTMENT' SKIP 2 SET LINESIZE 60 /
特定の空白の個数分だけタイトル要素をインデントするには、TTITLEコマンドまたはBTITLEコマンドにCOL句を使用します。たとえば、COL 1を指定すると、後続の値が先頭文字の位置に置かれます。したがって、これはLEFT、つまり0個のインデントに相当します。COL 15を指定すると、タイトル要素が15文字目に配置され、14個分の空白でインデントされます。
ACME WIDGET SALES DEPARTMENT PERSONNEL REPORT DEPARTMENT_ID LAST_NAME SALARY ------------- ------------------------- ---------- 30 Colmenares 2500 30 Himuro 2600 30 Tobias 2800 30 Baida 2900 30 Khoo 3100 30 Raphaely 11000 COMPANY CONFIDENTIAL 6 rows selected.
例6-21 タイトル要素のインデント
会社名を左揃えで出力し、レポート名を次の行に空白5個分のみインデントして出力するには、次のように入力します。
TTITLE LEFT 'ACME WIDGET' SKIP 1 - COL 6 'SALES DEPARTMENT PERSONNEL REPORT' SKIP 2
この時点で現行の問合せを実行し、結果を表示します。
/
長さが500文字を超えるタイトルを入力する必要がある場合は、SQL*PlusコマンドのDEFINEを使用して、タイトルの各行のテキストを別々の置換変数に格納します。
DEFINE LINE1 = 'This is the first line...' DEFINE LINE2 = 'This is the second line...' DEFINE LINE3 = 'This is the third line...'
その後、次のようにTTITLEコマンドまたはBTITLEコマンド内でそれらの変数を参照します。
TTITLE CENTER LINE1 SKIP 1 CENTER LINE2 SKIP 1 - CENTER LINE3
現行ページ番号およびその他のシステム管理値をタイトル内に表示するには、システム値の名前をタイトル要素として入力します。たとえば、次のように入力します。
TTITLE LEFT system-maintained_value_name
タイトル内に表示できるシステム管理値は5つあり、そのうち最も一般的なものはSQL.PNO(現行のページ番号)です。タイトル内に表示できるシステム管理値のリストについては、「TTITLE」コマンドを参照してください。
ACMEWIDGET PAGE: 1 DEPARTMENT_ID LAST_NAME SALARY ------------- ------------------------- ---------- 30 Colmenares 2500 30 Himuro 2600 30 Tobias 2800 30 Baida 2900 30 Khoo 3100 30 Raphaely 11000 COMPANY CONFIDENTIAL 6 rows selected.
SQL.PNOの書式が空白10個分の幅であることに注意してください。この書式は、TTITLE(またはBTITLE)のFORMAT句を使用して変更できます。
ACME WIDGET 'PAGE:' 1 DEPARTMENT_ID LAST_NAME SALARY ------------- ------------------------- ---------- 30 Colmenares 2500 30 Himuro 2600 30 Tobias 2800 30 Baida 2900 30 Khoo 3100 30 Raphaely 11000 COMPANY CONFIDENTIAL 6 rows selected.
例6-22 タイトル内での現行ページ番号の表示
現行ページ番号を会社名とともに各ページの一番上に表示するには、次のコマンドを入力します。
TTITLE LEFT 'ACME WIDGET' RIGHT 'PAGE:' SQL.PNO SKIP 2
この時点で、現行の問合せを再実行します。
/
マスター/ディテール・レポートを作成し、各ページの一番上に変更されるマスター列の値を表示し、その下にマスター列の値に対する詳細な問合せ結果を表示できます。上部タイトル内の列値を参照するには、求める値を変数に格納し、TTITLEコマンド内でその変数を参照します。変数を定義するには、次の書式のCOLUMNコマンドを使用します。
COLUMN column_name NEW_VALUE variable_name
SKIP PAGE句を使用して、ORDER BY句およびBREAKコマンド内にマスター列を挿入する必要があります。
Manager: 101 DEPARTMENT_ID LAST_NAME SALARY ------------- ------------------------- ---------- 10 Whalen 4400 40 Mavris 6500 70 Baer 10000 100 Greenberg 12000 110 Higgins 12000 Manager: 201 DEPARTMENT_ID LAST_NAME SALARY ------------- ------------------------- ---------- 20 Fay 6000 6 rows selected.
ページの一番下に列の値を出力する場合は、次の形式でCOLUMNコマンドを使用します。
COLUMN column_name OLD_VALUE variable_name
マスター列の新しい値の検出後、新しいページにブレークするプロセスの一部として下部タイトルが出力されます。したがって、単にマスター列のNEW_VALUEを参照した場合、次のディテール・セットの値が得られます。OLD_VALUEには、ページ・ブレークが開始される前に有効であったマスター列の値が記録されます。
例6-24 マスター/ディテール・レポートの作成
2人のマネージャの従業員番号を別々のページの一番上にそれぞれ表示し、そのマネージャの部下をマネージャの従業員番号と同じページに表示するレポートを作成するとします。最初に、次のように入力して、現行のマネージャの従業員番号を保持する変数MGRVARを作成します。
COLUMN MANAGER_ID NEW_VALUE MGRVAR NOPRINT
マネージャの従業員番号は、タイトル内に表示されるのみなので、ディテールの列としては出力しません。この例で入力したNOPRINT句を使用すると、MANAGER_ID列は出力されません。
次に、ページ・タイトルにラベルおよび値を挿入し、適切なBREAKコマンドを入力して、最後の例の下部タイトルを非表示にします。
TTITLE LEFT 'Manager: ' MGRVAR SKIP 2 BREAK ON MANAGER_ID SKIP PAGE BTITLE OFF
最後に、次の問合せを入力して実行します。
SELECT MANAGER_ID, DEPARTMENT_ID, LAST_NAME, SALARY FROM EMP_DETAILS_VIEW WHERE MANAGER_ID IN (101, 201) ORDER BY MANAGER_ID, DEPARTMENT_ID;
タイトルに値を入力するだけで、レポートに日付を付けることができます。非定型のレポートの場合はこの方法でも十分ですが、同じレポートを繰り返し実行する場合は、レポートの実行時に日付が自動的に付くようにするとより効果的です。この機能は、現在の日付を保持する変数を作成して使用します。
事前に定義した置換変数_DATEを参照して、他の変数の場合と同様に、現在の日付をタイトルに表示できます。
LOGINファイルまたはSELECT文に指定されている日付書式モデルによって、SQL*Plusでの日付の表示書式が決まります。日付書式モデルの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。LOGINファイルの詳細は、「LOGINファイルの変更」を参照してください。
これらのコマンドは、対話形式でも入力できます。詳細は、「COLUMN」を参照してください。
通常、レポートの1ページには、SETコマンドのNEWPAGE変数で設定された行数分の空白行、上部タイトル、列ヘッダー、問合せ結果および下部タイトルが含まれています。SQL*Plusでは、長すぎて1ページに収まらないレポートは複数の連続したページに表示され、各ページに独自のタイトルおよび列ヘッダーが付けられます。SQL*Plusで各ページに表示されるデータの量は、現行のページ・サイズによって決まります。
上部タイトルより前の行数: 1
上部タイトルからページ一番下までの1ページ当たりの行数: 14
1行当たりの文字数: 80
これらの設定は、ご使用のコンピュータ画面のサイズ、または用紙サイズ(印刷の場合)に合うように変更できます。
ページの長さはシステム変数PAGESIZEを使用して変更できます。ページの長さの変更は、レポートの印刷時などに必要な場合があります。
各ページの始めから上部タイトルまでの行数を設定するには、SETコマンドのNEWPAGE変数を使用します。
SET NEWPAGE number_of_lines
NEWPAGEを0(ゼロ)に設定した場合、SQL*Plusでは、新しいページを開始するために0(ゼロ)行がスキップされ、改ページ文字が表示および印刷されます。ほとんどのタイプのコンピュータ画面では、改ページ文字を使用すると画面が消去され、カーソルが1行目の先頭に移動されます。レポートの印刷時に改ページ文字が検出されると、その検出位置がページの最後ではない場合でも、次のページの一番上の印字位置までプリンタが移動します。NEWPAGEをNONEに設定した場合、レポートのページ間で空白行または改ページ文字は出力されません。
1ページの行数を設定するには、次のようにSETコマンドのPAGESIZE変数を使用します。
SET PAGESIZE number_of_lines
出力でタイトルを正しく中央揃えするために行サイズを小さくできます。また、幅の広い用紙に出力するために行サイズを大きくすることもできます。行の幅は、次のようにSETコマンドのLINESIZE変数を使用して変更できます。
SET LINESIZE number_of_characters
ACME WIDGET PERSONNEL REPORT 01-JAN-2001 FIRST LAST MONTHLY DEPARTMENT_ID NAME NAME SALARY ------------- -------------------- ------------------------- -------- 90 Steven King $24,000 90 Neena Kochhar $17,000 90 Lex De Haan $17,000 80 John Russell $14,000 80 Karen Partners $13,500 20 Michael Hartstein $13,000 6 rows selected.
この時点で、次のように入力して、PAGESIZE、NEWPAGEおよびLINESIZEをデフォルト値にリセットします。
SET PAGESIZE 14 SET NEWPAGE 1 SET LINESIZE 80
これらの変数の現在の設定値を表示するには、次のようにSHOWコマンドを使用します。
SHOW PAGESIZE SHOW NEWPAGE SHOW LINESIZE
SQL*PlusコマンドのSPOOLを使用して、問合せ結果をファイルに格納できます。また、ご使用のコンピュータのデフォルト・プリンタでの印刷もできます。
例6-25 ページ・サイズの設定
ページ・サイズを66行に設定し、各ページの始まりで画面を消去(またはプリンタを改ページ)し、行サイズを70に設定するには、次のコマンドを入力します。
SET PAGESIZE 66 SET NEWPAGE 0 SET LINESIZE 70
この時点で、次のコマンドを入力し実行して、結果を表示します。
TTITLE CENTER 'ACME WIDGET PERSONNEL REPORT' SKIP 1 - CENTER '01-JAN-2001' SKIP 2
この時点で、次のように問合せを実行します。
COLUMN FIRST_NAME HEADING 'FIRST|NAME'; COLUMN LAST_NAME HEADING 'LAST|NAME'; COLUMN SALARY HEADING 'MONTHLY|SALARY' FORMAT $99,999; SELECT DEPARTMENT_ID, FIRST_NAME, LAST_NAME, SALARY FROM EMP_DETAILS_VIEW WHERE SALARY>12000;