アクションを省略した場合、BREAK ON columnによって、columnの中で重複 する値の出力が抑止され、対応するCOMPUTEコマンドに指定された計算を
SQL*Plusが実行するレポート内の位置にマークが設定されます。
ON columnは、1回以上指定できます。次の例のように、複数のON句を指定
したとします。
SQL> BREAK ON DEPTNO SKIP PAGE ON JOB -
> SKIP 1 ON SAL SKIP 1
最初のON句は、最も外側のブレーク(この場合はON DEPTNO)を表し、
最後のON句は、最も内側のブレーク(この場合はON SAL)を表します。
SQL*Plusは、それぞれの出力行から指定されたブレークを検索します。この
とき、最も外側のブレークから始めて、最も内側のブレークに到達するまで、
入力された句の順序で処理が進められます。例では、SQL*Plusは、DEPTNO、
JOB、SALの順で値の変化を検索します。
次にSQL*Plusは、最も内側のブレークについて指定されているアクションか
ら始めて、最も外側のブレークまで、逆の順で、各アクションを実行します
(この例では、ON SALEの場合のSKIP 1から始めて、ON DEPTNOの場合の
SKIP PAGEまで進みます)。SQL*Plusは、初期検索で見つかった最初の発生ブ
レークについて指定されているアクションまでの各アクションを実行します。
たとえば、ある行でJOBの値が変化し、DEPTNOおよびSALの値には変化が なかった場合、SQL*Plusは、2行スキップしてからその行を出力します(1行
はON SAL句のSKIP1の結果で、もう1行はONJOB句のSKIP1の結果で
す)。
ON columnを使用するときは、必ずSQL SELECTコマンドの中でORDER BY
句も使用します。通常、BREAKコマンドの中で使用する列は、ORDER BY句 の中にも同じ順序で使用します(ただし、ORDER BY句で指定したすべての列
をBREAKコマンドの中で指定しなくてもかまいません)。これは、レポート
上の意味のない位置でブレークが発生するのを防ぐためです。
この項の前半で指定したBREAKコマンドが使用されている場合、次の
SELECTコマンドによって、有効な結果が得られます。
SQL> SELECT DEPTNO, JOB, SAL, ENAME 2 FROM EMP
3 ORDER BY DEPTNO, JOB, SAL, ENAME;
DEPTNOが同じであるすべての行がまとめて1ページに出力され、そのペー ジの中では、JOBが同じであるすべての行が1グループにまとめられます。そ れぞれの職種(JOB)グループの中では、SALが同じである職種がグループに まとめられます。このBREAKコマンドにはENAMEは指定されていないの で、ENAME内にブレークがあってもアクションは実行されません。
ON expr [action [action]]
アクションを挿入する場合は、式の値が変化したときにSQL*Plusがとるアク ションを指定します。
アクションを省略した場合、BREAK ON exprは、expr の重複値の出力を抑止 し、対応するCOMPUTEコマンドに指定された計算をSQL*Plusが実行するレ ポート内の位置にマークが設定されます。
1つ以上の表列を含む式、あるいはSQL SELECTまたはSQL*Plus COLUMN コマンドでレポート列に割り当てられている別名を含む式を使用できます。
BREAKコマンドの中で式を使用する場合は、SELECTコマンドの中での順序
と同じ順序でexprを入力する必要があります。たとえば、SELECTコマンドの 中の式がa+bである場合、COLUMNコマンドの中でSELECTコマンドの中の 式を参照するときに、b+aまたは(a+b)はいずれも使用できません。
前述のON columnで指定した情報は、ON exprに適用できます。
ON ROW [action [action]]
アクションを挿入する場合は、SQL SELECTコマンドが行を戻したときに
SQL*Plusがとるアクションを指定します。ROWブレークは、BREAKコマン
ド内のどこに指定してあっても、最も内側のブレークになります。特定の行に
ついてBREAKを指定する場合は、必ずアクションを指定します。
ON REPORT [action]
対応するCOMPUTEコマンドに指定された計算を、SQL*Plusが行うレポート
内の位置にマークが設定されます。総合計またはその他の総計値を出力するに は、BREAK ON REPORTとCOMPUTEを併用します。
REPORTブレークは、BREAKコマンド内のどこに指定してあっても、最も外
側のブレークになります。
SQL*Plusはレポートの終わりに1ページをスキップしないので、BREAK ON
REPORT SKIP PAGEは使用できません。
項または句の詳細は、次の説明を参照してください。
SKI[P] n
ブレークが発生した行を出力する前に、n行スキップします。
[SKI[P]] PAGE
ブレークが発生した行を出力する前に、1ページ分として定義されている行数 のみスキップします。1ページの行数は、SETコマンドのPAGESIZE句を使用 して設定できます。PAGESIZEは、SQL*Plusが1ページとみなす行数を変更 するのみです。したがって、NEWPAGE 0も同時に指定しない限り、SKIP PAGEによって必ずしも物理的なページ・ブレークが行われるとは限りませ ん。
NODUP[LICATES]
あるブレーク列の値が前の行の列値と同じ場合は、その値ではなく空白が出力 されます。
DUP[LICATES]
選択した各行のブレーク列の値が出力されます。
現行のブレーク定義をリスト表示するには、句を指定せずに、BREAKを入力します。
使用方法 使用方法 使用方法 使用方法
新しいBREAKコマンドを入力すると、前のBREAKコマンドは無効になります。
BREAKコマンドを取り消すには、CLEAR BREAKSを使用します。
例 例 例 例
職種の重複値を出力し、JOBの値が変化したときにSALの平均値を出して空白行を1行挿 入し、さらに 、DEPTNOの値が変化したときにSALの合計値を出力して、再び空白行を挿 入するレポートを生成するには、次のコマンドを入力します(この例では、部門10および 30から、CLERKおよびSALESMANの職種のみが選択されます)。
SQL> BREAK ON DEPTNO SKIP 1 ON JOB SKIP 1 DUPLICATES SQL> COMPUTE SUM OF SAL ON DEPTNO
SQL> COMPUTE AVG OF SAL ON JOB
SQL> SELECT DEPTNO, JOB, ENAME, SAL FROM EMP 2 WHERE JOB IN ('CLERK', 'SALESMAN') 3 AND DEPTNO IN (10, 30)
4 ORDER BY DEPTNO, JOB;
出力結果は次のようになります。
DEPTNO JOB ENAME SAL ---
10 CLERK MILLER 1300
********* avg 1300
********** ---sum 1300
30 CLERK JAMES 950
********* avg 950
DEPTNO JOB ENAME SAL --- 30 SALESMAN ALLEN 1600
SALESMAN WARD 1250
SALESMAN MARTIN 1250
SALESMAN TURNER 1500
********* avg 1400
********** ---sum 6550
6 rows selected.