ヘッダーをスキップ

Oracle Rdb SQLリファレンス・マニュアル リリース7.2 E06178-01 |
| 目次 | 索引

戻る | 次へ |

# REVOKE文: ロール

> 別のユーザーまたはロールのロールを取り消します。

## 環境

> REVOKE文は次の環境のロールで使用できます。

> - 対話型SQL内

> - プリコンパイル対象のホスト言語プログラムに埋め込まれる場合

> - 非ストアドSQLモジュールの非ストアド・プロシージャの一部として

> - 動的SQLで動的に実行される文として

## 形式

## 引数

> ### ALL ROLES

> リストされたユーザーに割り当てられているロールをすべて取り消します。

> ### FROM username

> ### FROM role-name

> ### FROM PUBLIC

> 指定したロールが取り消されるユーザー、ロールまたはPUBLICユーザーを指定します。

> ### role-name

> CREATE ROLE文で作成された、またはGRANT文で自動作成された既存のロールの名前です。

## 使用方法

> - ユーザーまたは別のロールのロールを取り消すには、データベースに対するSECURITY権限が必要です。

## 例

> 例1: ロールの付与および取消し

>     SQL> -- Optionally, create three users and two roles.
>     SQL> -- Oracle Rdb automatically generates users and
>     SQL> -- roles if they are identified externally.
>     SQL> CREATE USER ABLOWNEY IDENTIFIED EXTERNALLY;
>     SQL> CREATE USER BGREMBO IDENTIFIED EXTERNALLY;
>     SQL> CREATE USER LWARD IDENTIFIED EXTERNALLY;
>     SQL> CREATE ROLE SALES_MANAGER IDENTIFIED EXTERNALLY;
>     SQL> CREATE ROLE DIVISION_MANAGER IDENTIFIED EXTERNALLY;
>     SQL> -- Grant the SALES_MANAGER role to users ABLOWNEY and
>     SQL> -- BGREMBO. Also grant the SALES_MANAGER role to the
>     SQL> -- DIVISION MANAGER ROLE.
>     SQL> GRANT SALES_MANAGER TO ABLOWNEY, BGREMBO, DIVISION_MANAGER;
>     SQL> -- Grant the DIVISION_MANAGER role to LWARD. LWARD now
>     SQL> -- has both the SALES_MANAGER and DIVISION_MANAGER roles.
>     SQL> GRANT DIVISION_MANAGER TO LWARD;
>     SQL> -- Revoke the DIVISION_MANAGER role from LWARD. He has
>     SQL> -- left the company.
>     SQL> REVOKE DIVISION_MANAGER FROM LWARD;
>     SQL> -- Grant the DIVISION_MANAGER role to BGREMBO.  She
>     SQL> -- has been promoted to division manager.
>     SQL> GRANT DIVISION_MANAGER TO BGREMBO;

# ROLLBACK文

> トランザクションを終了し、そのトランザクションの開始以降に行ったすべての変更を元に戻します。また、ROLLBACK文は次を実行します。

> - （WITH HOLDカーソルを除く）すべてのオープンなカーソルのクローズ

> - すべての行ロックの解除

> - チェックポイント操作の実行（高速コミット処理が有効な場合）

> ROLLBACK文は次のものに反映されます。

> - 現在のトランザクションに含まれる、すべてのオープンなデータベース

> - SQLデータ操作文（DELETE、UPDATEおよびINSERT）を使用してデータに加えられたすべての変更

> - SQLデータ定義文（ALTER、CREATE、DROP、RENAME、GRANTおよびREVOKE）を使用してデータ定義に加えられたすべての変更

## 環境

> ROLLBACK文は次の環境で使用できます。

> - 対話型SQL内

> - プリコンパイル対象のホスト言語プログラムに埋め込まれる場合

> - SQLモジュールのプロシージャの一部として

> - 動的SQLで動的に実行される文として

## 形式

## 引数

> ### AND CHAIN

> ロールバックされたトランザクションと同じ属性を使用して、新規トランザクションを暗黙的に開始します。

> ### WORK

> ROLLBACK文には影響のないオプション・キーワードを指定します。この引数は、ANSI/ISO SQL規格との互換性を目的としています。

## 使用方法

> - ROLLBACK文は、ATOMIC複合文では使用できません。

> - AND CHAIN句は、複合文（BEGIN...ENDブロック）で、またはストアド・プロシージャの本体としてのみ使用できます。

> - AND CHAINを使用している場合、新規トランザクションはロールバックされたトランザクションと同じ属性を使用して暗黙的に開始されます。READ WRITE、READ ONLY、RESERVING、EVALUATING、WAITおよびISOLATION LEVELなどの属性は、新規トランザクションについて保持されます。

> - 複合トランザクションの属性を指定するのは1回のみであるため、このAND CHAIN句を使用してアプリケーションを簡易化できます。

> - SET FLAGSオプションのTRANSACTION_PARAMETERSが指定されると、ロールバックされたトランザクションと連鎖トランザクションを識別するために一連の出力が書き込まれます。SET TRANSACTIONはそれぞれ、各トランザクション・アクション行の後に表示される一意の順序番号を割り当てます。

> - ROLLBACK文が複合文内で実行され、トランザクションがアクティブでない場合、結果として、ステータスは成功（SQLSTATEまたはSQLCODE）になります。
>   ただし、ROLLBACK文が単一文で実行される場合はエラーになります。この動作は、言語をSQL92またはSQL99に設定するか、SET QUIET COMMIT文を使用して変更できます。詳細は、「SET DIALECT文」および「SET QUIET COMMIT文」を参照してください。SQLモジュール言語またはSQLプリコンパイラ・アプリケーションについては、モジュール・ヘッダーのQUIET_COMMIT修飾子およびQUIET COMMIT句を参照してください。

## 例

> 例1: COBOLプログラムでの変更のロールバック

>     GET-ID-NUMBER.
>           DISPLAY "Enter employee ID number:  "
>              WITH NO ADVANCING.
>           ACCEPT EMPLOYEE-ID.
>     CHANGE-SALARY.
>           DISPLAY "Enter new salary amount:  "
>              WITH NO ADVANCING.
>           ACCEPT SALARY-AMOUNT.

>     EXEC SQL  UPDATE  SALARY_HISTORY
>               SET     SALARY_AMOUNT = :SALARY-AMOUNT
>               WHERE   EMPLOYEE_ID = :EMPLOYEE-ID
>               AND     END_DATE IS NULL
>     END-EXEC

>           DISPLAY EMPLOYEE-ID, SALARY-AMOUNT.
>           DISPLAY "Is this figure correct? [Y or N]  "
>              WITH NO ADVANCING.
>           ACCEPT ANSWER.
>           IF ANSWER = "Y" THEN

>             EXEC SQL  COMMIT END-EXEC
>           ELSE
>             EXEC SQL  ROLLBACK END-EXEC
>             DISPLAY "Please enter the new salary amount again."
>             GO TO CHANGE-SALARY
>           END-IF.

> 例2: COMMITおよびAND CHAINの使用

> 次の単純な例では、プロシージャの開始時にSET TRANSACTIONを1回実行します。その後、COMMIT AND CHAIN構文を使用して、トランザクションを定期的にコミットし、再開します。トランザクション特性の定義は1つのみのため、これによってアプリケーションが簡略化されています。

>     SQL> -- process table in batches
>     SQL>
>     SQL> set compound transactions 'internal';
>     SQL> set flags 'transaction,trace';
>     SQL>
>     SQL> begin
>     cont> declare :counter integer = 0;
>     cont> declare :emp integer;
>     cont>
>     cont> set transaction
>     cont>     read write
>     cont>     reserving employees for exclusive write;
>     cont>
>     cont> for :emp in 0 to 600
>     cont> do
>     cont>     begin
>     cont>     declare :id char(5)
>     cont>           default substring (cast (:emp+100000 as varchar(6))
>     cont>                              from 2 for 5);
>     cont>     if exists (select * from employees where employee_id = :id)
>     cont>     then
>     cont>         trace 'found: ', :id;
>     cont>         if :counter > 20
>     cont>         then
>     cont>             commit and chain;
>     cont>             set :counter = 1;
>     cont>         else
>     cont>             set :counter = :counter + 1;
>     cont>         end if;
>     cont>     end if;
>     cont>     end;
>     cont> end for;
>     cont>
>     cont> commit;
>     cont> end;
>     ~T Compile transaction (1) on db: 1
>     ~T Transaction Parameter Block: (len=2)
>     0000 (00000) TPB$K_VERSION = 1
>     0001 (00001) TPB$K_WRITE (read write)
>     ~T Start_transaction (1) on db: 1, db count=1
>     ~T Rollback_transaction on db: 1
>     ~T Compile transaction (3) on db: 1
>     ~T Transaction Parameter Block: (len=14)
>     0000 (00000) TPB$K_VERSION = 1
>     0001 (00001) TPB$K_WRITE (read write)
>     0002 (00002) TPB$K_LOCK_WRITE (reserving) "EMPLOYEES" TPB$K_EXCLUSIVE
>     ~T Start_transaction (3) on db: 1, db count=1
>     ~Xt: found: 00164
>        .
>        .
>        .
>     ~Xt: found: 00184
>     ~Xt: found: 00185
>     ~T Commit_transaction on db: 1
>     ~T Prepare_transaction on db: 1
>     ~T Restart_transaction (3) on db: 1, db count=1
>     ~Xt: found: 00186
>        .
>        .
>        .
>     ~Xt: found: 00205
>     ~Xt: found: 00206
>     ~T Commit_transaction on db: 1
>     ~T Prepare_transaction on db: 1
>     ~T Restart_transaction (3) on db: 1, db count=1
>     ~Xt: found: 00207
>        .
>        .
>        .
>     ~Xt: found: 00228
>     ~Xt: found: 00229
>     ~T Commit_transaction on db: 1
>     ~T Prepare_transaction on db: 1
>     ~T Restart_transaction (3) on db: 1, db count=1
>     ~Xt: found: 00230
>        .
>        .
>        .
>     ~Xt: found: 00249
>     ~Xt: found: 00267
>     ~T Commit_transaction on db: 1
>     ~T Prepare_transaction on db: 1
>     ~T Restart_transaction (3) on db: 1, db count=1
>     ~Xt: found: 00276
>        .
>        .
>        .
>     ~Xt: found: 00435
>     ~Xt: found: 00471
>     ~T Commit_transaction on db: 1
>     ~T Prepare_transaction on db: 1
>     SQL>

# SELECT文: 一般形式

> 結果表を指定します。結果表は、選択式によって指定された条件を満たしている、1つ以上の表またはビューの列と行から導出された値の中間表です。これらの列と行が属する表またはビューは、SELECT文のFROM句で識別されます。

> SELECT文の基本要素を選択式と呼びます。選択式の詳細は、第2.8.1項を参照してください。

> ホスト言語プログラムの結果表の行を取得するには、DECLARE CURSOR文を使用するか、またはシングルトン選択と呼ばれる特殊な形式のSELECT文を使用する必要があります。シングルトン選択の詳細は、「SELECT文: シングルトン選択」を参照してください。

> SQLでは、SELECT文の句は次の順序で評価されます。

> 1. FROM

> 2. WHERE

> 3. GROUP BY

> 4. HAVING

> 5. 選択リスト

> 6. ORDER BY

> 7. LIMIT TO

> 8. OPTIMIZE

> これらのそれぞれの句の後に、次の句の評価に使用する中間結果表が作成されます。

## 環境

> SELECT文の一般形式は、対話型SQLおよび動的SQLでのみ使用できます。

## 形式

## 引数

> ### EDIT USING edit-string

> ### EDIT USING domain-name

> 編集文字列を値式に関連付けます。この句により、問合せで列または変数に対して定義されたEDIT STRINGはすべて無効になります。この句は対話型SQLでのみ使用できます。

> ### FOR UPDATE OF column-name

> ユーザーまたはユーザーのプログラムが後でUPDATE文を使用して変更するカーソルの列を指定します。FOR UPDATE句の列名は、FROM句に指定された表またはビューに属している必要があります。

> 次の場合は、後でUPDATE文を使用して行を変更するためにSELECT文のFOR UPDATE句を指定する必要はありません。

> - 列名を含むFOR UPDATE句を指定して、後でFOR UPDATE句にない列をUPDATE文で指定した場合、警告メッセージが発行され、更新変更が続行されます。

> - FOR UPDATE句を指定して列名を指定しない場合は、UPDATE文を使用して任意の列を更新できます。この場合、メッセージは表示されません。

> - FOR UPDATE句を指定しない場合は、UPDATE文を使用して任意の列を更新できます。この場合、メッセージは表示されません。

> SELECT文のFOR UPDATE OF句は、選択された行をすべてロックしてUPDATE ONLY CURSORセマンティクスを提供します。

> ### OPTIMIZE AS query-name

> 名前を問合せに割り当てます。RDMS$DEBUG_FLAGS論理名を定義するか、または'STRATEGY'オプションを指定したSET FLAGSを使用して、問合せ結果の作成に使用されるアクセス・メソッドを確認できます。次の例は、OPTIMIZE AS句の使用方法を示しています。

>     SQL> DELETE FROM EMPLOYEES E
>     cont> WHERE EXISTS ( SELECT *
>     cont>                FROM   SALARY_HISTORY S
>     cont>                WHERE  S.EMPLOYEE_ID = E.EMPLOYEE_ID
>     cont>                AND    S.SALARY_AMOUNT > 75000)
>     cont> OPTIMIZE AS DEL_EMPLOYEE;
>     Leaf#01 FFirst RDB$RELATIONS Card=19
>        .
>        .
>        .
>     ~Query Name : DEL_EMPLOYEE
>        .
>        .
>        .
>     7 rows deleted

> ### OPTIMIZE FOR

> 選択式を指定する文に対して優先するオプティマイザ計画を指定します。次のオプションを使用できます。

> - FAST FIRST
>   FAST FIRST用に最適化された問合せが、これにより全体のスループットが低下しても、できるかぎり速やかにデータをユーザーに返します。
>   問合せが早期に取り消されることがある場合は、FAST FIRSTの最適化を指定する必要があります。FAST FIRST最適化の有力な候補は、レコードのグループをユーザーに表示する対話型アプリケーションです。このようなアプリケーションでは、ユーザーは最初の数画面の確認後、問合せを中断することもできます。たとえば、シングルトンSELECT文では、FAST FIRST最適化がデフォルトで設定されます。
>   最適化レベルを明示的に設定しない場合は、FAST FIRSTがデフォルトとなります。

> - TOTAL TIME
>   アプリケーションをバッチで実行し、問合せのすべてのレコードにアクセスして更新またはレポートの書込みを行う場合は、TOTAL TIME最適化を指定する必要があります。TOTAL TIME最適化は、ほとんどの問合せに効果があります。
>   次の例は、優先される最適化モードを設定するためのDECLARE CURSOR構文を示しています。

>       SQL> DECLARE TEMP1 TABLE CURSOR
>       cont>  FOR
>       cont>    SELECT *
>       cont>      FROM EMPLOYEES
>       cont>      WHERE EMPLOYEE_ID > '00400'
>       cont>  OPTIMIZE FOR FAST FIRST;
>       SQL> --
>       SQL> DECLARE TEMP2 TABLE CURSOR
>       cont>  FOR
>       cont>    SELECT LAST_NAME, FIRST_NAME
>       cont>      FROM EMPLOYEES
>       cont>        ORDER BY LAST_NAME
>       cont>  OPTIMIZE FOR TOTAL TIME;

> - SEQUENTIAL ACCESS
>   順次アクセスの使用を強制します。このオプションは、厳密なパーティション化機能を使用する表では特に有用です。
>   表の記憶域マップの属性がPARTITIONING IS NOT UPDATABLEの場合、記憶域へのデータのマッピングは厳密に守られます。これは厳密なパーティション化と呼ばれます。このような表に対する問合せで順次アクセスを行うと、オプティマイザでは、すべてのパーティションがスキャンされるのではなく、WHERE制限と一致しないパーティションが除外されます。
>   次の例は、選択した行を特定のパーティションから削除する問合せを示しています。この表には、オプティマイザで選択される可能性のある索引もいくつか含まれています。このため、OPTIMIZE句によって順次アクセスが強制的に行われます。

>       SQL> delete from PARTS_LOG
>       cont> where parts_id between 10000 and 20000
>       cont>   and expire_date < :purge_date
>       cont> optimize for sequential access;

>   このような問合せで行われるアクセスはすべて順次アクセスです。索引アクセスを使用する同様の問合せを比較して、使用中のI/Oが受け入れられるかに注意します。

> ### OPTIMIZE USING outline-name

> 選択式とアウトラインでアウトラインIDが異なる場合でも、選択式で使用する問合せアウトラインを明示的に指定します。

> 次の例では、WOMENS_DEGREESという名前のアウトラインを作成する問合せを示します。

>     SQL> SELECT E.LAST_NAME, E.EMPLOYEE_ID, D.DEGREE, D.DEGREE_FIELD, D.YEAR_GIVEN
>     cont> FROM EMPLOYEES E, DEGREES D WHERE E.SEX = 'F'
>     cont> AND E.EMPLOYEE_ID = D.EMPLOYEE_ID
>     cont> ORDER BY LAST_NAME

> OPTIMIZE USING句を使用してWOMENS_DEGREESアウトラインを指定すると、次の例に示すように、わずかに異なる問合せを実行する場合でも、Oracle Rdbでは、WOMENS_DEGREESアウトラインの使用が試行されます。

>     SQL> SELECT E.LAST_NAME, E.EMPLOYEE_ID, D.DEGREE, D.DEGREE_FIELD, D.YEAR_GIVEN
>     cont> FROM EMPLOYEES E, DEGREES D WHERE E.SEX = 'F'
>     cont> AND E.EMPLOYEE_ID = D.EMPLOYEE_ID
>     cont> ORDER BY LAST_NAME
>     cont> LIMIT TO 10 ROWS
>     cont> OPTIMIZE USING WOMENS_DEGREES;
>     ~S: Outline WOMENS_DEGREES used  <-- the query uses the WOMENS_DEGREES outline
>        .
>        .
>        .
>      E.LAST_NAME      E.EMPLOYEE_ID   D.DEGREE   D.DEGREE_FIELD    D.YEAR_GIVEN
>      Boyd             00244           MA         Elect. Engrg.             1982
>      Boyd             00244           PhD        Applied Math              1979
>      Brown            00287           BA         Arts                      1982
>      Brown            00287           MA         Applied Math              1979
>      Clarke           00188           BA         Arts                      1983
>      Clarke           00188           MA         Applied Math              1976
>      Clarke           00196           BA         Arts                      1978
>      Clinton          00235           MA         Applied Math              1975
>      Clinton          00201           BA         Arts                      1973
>      Clinton          00201           MA         Applied Math              1978
>     10 rows selected

> アウトラインの作成方法の詳細は、「CREATE OUTLINE文」を参照してください。

> ### OPTIMIZE WITH

> 以前のOracle Rdbバージョンで使用されていたDEFAULT、行数が少ない方が選択されると仮定するAGGRESSIVE、問合せにリテラルを使用して索引で予備評価を行うSAMPLEDの3つの最適化制御のいずれかを選択します。

> ### select-expr

> SELECT式の詳細は、第2.8.1項を参照してください。

## 使用方法

> - アウトラインが存在する場合は、OPTIMIZE USING句で指定されているアウトラインが使用されます。ただし、アウトラインのディレクティブを1つ以上順守できない場合は除きます。たとえば、アウトラインの準拠レベルが必須で、アウトラインのディレクティブで指定されている索引の1つが削除された場合、そのアウトラインは使用されません。既存のアウトラインを使用できない場合は、エラー・メッセージが発行されます。
>   存在しないアウトラインの名前を指定すると、問合せがコンパイルされ、そのアウトライン名は無視され、問合せと同じアウトラインIDを持つ既存のアウトラインが検索されます。同じアウトラインIDのアウトラインが検出されると、そのアウトラインのディレクティブを使用して問合せを実行しようとします。同じアウトラインIDを持つアウトラインが検出されない場合、問合せ実行のための計画がオプティマイザで選択されます。
>   問合せアウトラインの詳細は、『Oracle Rdb7 Guide to Database Performance and Tuning』を参照してください。

## 例

> 例1: SELECT文の使用

> 次のSELECT文は、EMPLOYEES表のすべての行を不特定の順序で返します。

>     SQL> SELECT LAST_NAME, FIRST_NAME, MIDDLE_INITIAL FROM EMPLOYEES;
>      LAST_NAME        FIRST_NAME   MIDDLE_INITIAL
>      Toliver          Alvin        A
>      Smith            Terry        D
>      Dietrich         Rick         NULL
>      Kilpatrick       Janet        NULL
>        .
>        .
>        .
>     100 rows selected

> 例2: 選択した行のソートに使用するORDER BY句の追加

> 同じSELECT文にORDER BY句を追加すると、SQLはLAST_NAME句に基づいて行をソートします。

>     SQL> SELECT LAST_NAME, FIRST_NAME, MIDDLE_INITIAL FROM
>     cont> EMPLOYEES ORDER BY LAST_NAME;
>      LAST_NAME        FIRST_NAME   MIDDLE_INITIAL
>      Ames             Louie        A
>      Andriola         Leslie       Q
>      Babbin           Joseph       Y
>      Bartlett         Dean         G
>      Bartlett         Wes          NULL
>        .
>        .
>        .
>     100 rows selected

> 例3: 一定数の行を返すLIMIT TO句の追加

> 1つのSELECT文でORDER BY句とLIMIT TO句の両方を使用すると、SQLは次の処理を行います。

> 1. LAST_NAME句に従ってEMPLOYEES表のすべての行をソートします。

> 2. 順序付けられたセットの最初の5行を返します。

>     SQL> SELECT LAST_NAME, FIRST_NAME, MIDDLE_INITIAL FROM
>     cont> EMPLOYEES ORDER BY LAST_NAME LIMIT TO 5 ROWS;
>      LAST_NAME        FIRST_NAME   MIDDLE_INITIAL
>      Ames             Louie        A
>      Andriola         Leslie       Q
>      Babbin           Joseph       Y
>      Bartlett         Dean         G
>      Bartlett         Wes          NULL
>     5 rows selected

> 例4: OPTIMIZE句を使用したアウトラインおよび問合せの名前の指定

> 次の選択問合せでは、事前に定義されたWOMENS_DEGREESと呼ばれるアウトラインが使用され、問合せにも同じ名前が付けられます。RDMS$DEBUG_FLAGS論理は"Ss"に設定されています。

>     SQL> SELECT E.LAST_NAME, E.EMPLOYEE_ID, D.DEGREE,
>     cont> D.DEGREE_FIELD, D.YEAR_GIVEN
>     cont>    FROM EMPLOYEES E, DEGREES D
>     cont>    WHERE E.SEX = 'F'
>     cont>       AND E.EMPLOYEE_ID = D.EMPLOYEE_ID
>     cont>    ORDER BY LAST_NAME
>     cont>    OPTIMIZE USING WOMENS_DEGREES
>     cont>             AS WOMENS_DEGREES;
>     ~Query Name : WOMENS_DEGREES
>     ~S: Outline WOMENS_DEGREES used
>     Sort
>     Cross block of 2 entries
>       Cross block entry 1
>         Conjunct        Get     Retrieval by index of relation EMPLOYEES
>           Index name  EMP_EMPLOYEE_ID [0:0]
>       Cross block entry 2
>         Leaf#01 BgrOnly DEGREES Card=165
>           BgrNdx1 DEG_EMP_ID [1:1] Fan=17
>     -- Rdb Generated Outline : 16-JUN-1994 11:01
>     create outline WOMENS_DEGREES
>     id 'D3A5BC351F507FED820EB704FC3F61E8'
>     mode 0
>     as (
>       query (
>         subquery (
>           EMPLOYEES 0     access path index       EMP_EMPLOYEE_ID
>             join by cross to
>           DEGREES 1       access path index       DEG_EMP_ID
>           )
>         )
>       )
>     compliance optional     ;
>      E.LAST_NAME      E.EMPLOYEE_ID   D.DEGREE   D.DEGREE_FIELD    D.YEAR_GIVEN
>      Boyd             00244           MA         Elect. Engrg.             1982
>      Boyd             00244           PhD        Applied Math              1979
>      Brown            00287           BA         Arts                      1982
>      Brown            00287           MA         Applied Math              1979
>      Clarke           00188           BA         Arts                      1983
>      Clarke           00188           MA         Applied Math              1976
>      Clarke           00196           BA         Arts                      1978
>        .
>        .
>        .
>     61 rows selected

> 例5: 値式への編集文字列の関連付け

>     SQL> CREATE DOMAIN MONEY INTEGER(2)
>     cont> EDIT STRING '$$$,$$$,$$9.99';
>     SQL> --Calculate the average salary for all current jobs.
>     SQL> SELECT EMPLOYEE_ID,
>     cont> AVG(SALARY_AMOUNT) AS AVERAGE EDIT USING MONEY,
>     cont> MAX(SALARY_AMOUNT) AS MAXIMUM EDIT USING MONEY,
>     cont> MAX(SALARY_START) AS START_DATE EDIT USING 'YYYBDDBMMMBWWW'
>     cont> FROM SALARY_HISTORY
>     cont> WHERE SALARY_END IS NULL
>     cont> GROUP BY EMPLOYEE_ID;
>      EMPLOYEE_ID          AVERAGE          MAXIMUM   START_DATE
>      00164             $51,712.00       $51,712.00   983 14 Jan Fri
>      00165             $11,676.00       $11,676.00   982  1 Jul Thu
>      00166             $18,497.00       $18,497.00   982  7 Aug Sat
>      00167             $17,510.00       $17,510.00   982 21 Aug Sat
>        .
>        .
>        .
>      00435             $84,147.00       $84,147.00   982 12 Mar Fri
>      00471             $52,000.00       $52,000.00   982 15 Aug Sun
>     100 rows selected

> 例6: 値式を指定したORDER BY句の使用

>     SQL> SELECT * FROM EMPLOYEES
>     cont> ORDER BY EXTRACT (YEAR FROM BIRTHDAY),
>     cont>  TRIM(FIRST_NAME) || TRIM(LAST_NAME);
>      00190         O'Sullivan       Rick         G.
>        78 Mason Rd.                NULL                        Fremont
>           NH      03044         M      12-Jan-1923   1             None
>      00231         Clairmont        Rick         NULL
>        92 Madiso7 Drive            NULL                        Chocorua
>           NH      03817         M      23-Dec-1924   2             None
>      00183         Nash             Walter       V.
>        197 Lantern Lane            NULL                        Fremont
>           NH      03044         M      19-Jan-1925   1             None
>      00177         Kinmonth         Louis        NULL
>        76 Maple St.                NULL                        Etna
>           NH      03750         M       7-Apr-1926   1             None
>      00240         Johnson          Bill         R.
>        20 South St                 NULL                        Milford
>           NH      03055         M      13-Apr-1927   2             None
>        .
>        .
>        .

> 例7: 値式を指定したGROUP BY句の使用

>     SQL> SELECT COUNT (*), EXTRACT (YEAR FROM BIRTHDAY)
>     cont> FROM EMPLOYEES
>     cont> GROUP BY EXTRACT (YEAR FROM BIRTHDAY);
>                1          1923
>                1          1924
>                1          1925
>                1          1926
>                4          1927

>                2          1928
>                1          1930
>                2          1931
>        .
>        .
>        .

> 例8: Oracleサーバーのスタイル構文を使用した外部結合の実行

>     SQL> SELECT EMPLOYEES.EMPLOYEE_ID, JOB_CODE
>     cont> FROM EMPLOYEES, CURRENT_JOB
>     cont> WHERE EMPLOYEES.EMPLOYEE_ID= CURRENT_JOB.EMPLOYEE_ID(+);
>      EMPLOYEES.EMPLOYEE_ID   CURRENT_JOB.JOB_CODE
>      00164                   DMGR
>      00165                   ASCK
>      00166                   DMGR
>      00167                   APGM
>      00168                   DMGR
>      00169                   SPGM
>      00170                   SCTR
>      00171                   PRGM
>        .
>        .
>        .