ヘッダーをスキップ

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

戻る | 次へ |

    SQL> SET CHARACTER LENGTH 'CHARACTERS';
    SQL> SHOW TABLE (COLUMNS) COLOURS;
    Information for table COLOURS

    Columns for table COLOURS:
    Column Name                     Data Type        Domain
    -----------                     ---------        ------
    ENGLISH                         CHAR(8)          MCS_DOM
             DEC_MCS 8 Characters,  8 Octets
    FRENCH                          CHAR(8)          MCS_DOM
             DEC_MCS 8 Characters,  8 Octets
    JAPANESE                        CHAR(4)          KANJI_DOM
             KANJI 4 Characters,  8 Octets
    ROMAJI                          CHAR(8)          DEC_KANJI_DOM
    KATAKANA                        CHAR(8)          KATAKANA_DOM
             KATAKANA 8 Characters,  8 Octets
    HINDI                           CHAR(8)          HINDI_DOM
             DEVANAGARI 8 Characters,  8 Octets
    GREEK                           CHAR(8)          GREEK_DOM
             ISOLATINGREEK 8 Characters,  8 Octets
    ARABIC                          CHAR(8)          ARABIC_DOM
             ISOLATINARABIC 8 Characters,  8 Octets
    RUSSIAN                         CHAR(8)          RUSSIAN_DOM
             ISOLATINCYRILLIC 8 Characters,  8 Octets

    SQL> ALTER TABLE COLOURS ALTER ROMAJI NCHAR(8);
    SQL> SHOW TABLE (COLUMNS) COLOURS;
    Information for table COLOURS

    Columns for table COLOURS:
    Column Name                     Data Type        Domain
    -----------                     ---------        ------
    ENGLISH                         CHAR(8)          MCS_DOM
             DEC_MCS 8 Characters,  8 Octets
    FRENCH                          CHAR(8)          MCS_DOM
             DEC_MCS 8 Characters,  8 Octets
    JAPANESE                        CHAR(4)          KANJI_DOM
             KANJI 4 Characters,  8 Octets
    ROMAJI                          CHAR(8)
             KANJI 8 Characters,  16 Octets
    KATAKANA                        CHAR(8)          KATAKANA_DOM
             KATAKANA 8 Characters,  8 Octets
    HINDI                           CHAR(8)          HINDI_DOM
             DEVANAGARI 8 Characters,  8 Octets
    GREEK                           CHAR(8)          GREEK_DOM
             ISOLATINGREEK 8 Characters,  8 Octets
    ARABIC                          CHAR(8)          ARABIC_DOM
             ISOLATINARABIC 8 Characters,  8 Octets
    RUSSIAN                         CHAR(8)          RUSSIAN_DOM
             ISOLATINCYRILLIC 8 Characters,  8 Octets

    SQL>

例7: 表COLOURSにデータが含まれている場合に表示されるエラー

次の例では、列ROMAJIはDEC_KANJIキャラクタ・セットを使用して定義されています。列のキャラクタ・セットを変更する前に列ROMAJIにデータが含まれている場合は、表の変更後にデータ検索を試行するとSQLによって次のエラーが表示されます。

    SQL> SELECT ROMAJI FROM COLOURS;
    %RDB-F-CONVERT_ERROR, invalid or unsupported data conversion
    -RDMS-E-CSETBADASSIGN, incompatible character sets prohibits the requested
     assignment
    SQL> --
    SQL> -- To recover, use the ROLLBACK statement or return the column to its
    SQL> -- original character set.
    SQL> --
    SQL> ROLLBACK;
    SQL> SELECT ROMAJI FROM COLOURS;
     ROMAJI
     kuro
     shiro
     ao
     aka
     ki
     midori
    6 rows selected
    SQL>

例8: POSITION句の使用

    SQL> SHOW TABLE (COL) EMPLOYEES
    Information for table EMPLOYEES
    Columns for table EMPLOYEES:
    Column Name                     Data Type        Domain
    -----------                     ---------        ------
    EMPLOYEE_ID                     CHAR(5)          ID_NUMBER
     Missing Value:
    LAST_NAME                       CHAR(14)         LAST_NAME
    FIRST_NAME                      CHAR(10)         FIRST_NAME
    MIDDLE_INITIAL                  CHAR(1)          MIDDLE_INITIAL
     Missing Value:
    ADDRESS_DATA_1                  CHAR(25)         ADDRESS_DATA_1
     Missing Value:
    ADDRESS_DATA_2                  CHAR(25)         ADDRESS_DATA_2
     Missing Value:
    CITY                            CHAR(20)         CITY
     Missing Value:
    STATE                           CHAR(2)          STATE
     Missing Value:
    POSTAL_CODE                     CHAR(5)          POSTAL_CODE
     Missing Value:
    SEX                             CHAR(1)          SEX
     Missing Value: ?
    BIRTHDAY                        DATE VMS         STANDARD_DATE
     Missing Value: 17-NOV-1858 00:00:00.00
    STATUS_CODE                     CHAR(1)          STATUS_CODE
     Missing Value: N
    SQL> -- Alter the table to rearrange the order in which columns
    SQL> -- are displayed.
    SQL> ALTER TABLE EMPLOYEES
    cont> ALTER COLUMN SEX BEFORE COLUMN LAST_NAME
    cont> ALTER COLUMN BIRTHDAY BEFORE COLUMN LAST_NAME
    cont> ALTER COLUMN STATUS_CODE BEFORE COLUMN LAST_NAME;
    SQL> COMMIT;
    SQL> -- Show the table to demonstrate that the order in which
    SQL> -- columns are displayed has changed.
    SQL> SHOW TABLE (COL) EMPLOYEES;
    Information for table EMPLOYEES
    Columns for table EMPLOYEES:
    Column Name                     Data Type        Domain
    -----------                     ---------        ------
    EMPLOYEE_ID                     CHAR(5)          ID_NUMBER
     Missing Value:
    SEX                             CHAR(1)          SEX
     Missing Value: ?
    BIRTHDAY                        DATE VMS         STANDARD_DATE
     Missing Value: 17-NOV-1858 00:00:00.00
    STATUS_CODE                     CHAR(1)          STATUS_CODE
     Missing Value: N
    LAST_NAME                       CHAR(14)         LAST_NAME
    FIRST_NAME                      CHAR(10)         FIRST_NAME
    MIDDLE_INITIAL                  CHAR(1)          MIDDLE_INITIAL
     Missing Value:
    ADDRESS_DATA_1                  CHAR(25)         ADDRESS_DATA_1
     Missing Value:
    ADDRESS_DATA_2                  CHAR(25)         ADDRESS_DATA_2
     Missing Value:
    CITY                            CHAR(20)         CITY
     Missing Value:
    STATE                           CHAR(2)          STATE
     Missing Value:
    POSTAL_CODE                     CHAR(5)          POSTAL_CODE
     Missing Value:

例9: トリガーの無効化

    SQL> SELECT * FROM JOB_HISTORY WHERE EMPLOYEE_ID='00164';
     EMPLOYEE_ID   JOB_CODE   JOB_START     JOB_END       DEPARTMENT_CODE
       SUPERVISOR_ID
     00164         DMGR       21-Sep-1981   NULL          MBMN
       00228
     00164         SPGM        5-Jul-1980   20-Sep-1981   MCBM
       00164
    2 rows selected
    SQL> DELETE FROM EMPLOYEES WHERE EMPLOYEE_ID ='00164';
    1 row deleted
    SQL> -- Show that the EMPLOYEE_ID_CASCADE_DELETE trigger caused
    SQL> -- records in the JOB_HISTORY table to be deleted for the
    SQL> -- employee with EMPLOYEE_ID of 00164.
    SQL> SELECT * FROM JOB_HISTORY WHERE EMPLOYEE_ID='00164';
    0 rows selected
    SQL> -- Roll back the delete operation and alter the EMPLOYEES table
    SQL> -- to disable the EMPLOYEE_ID_CASCADE_DELETE trigger.
    SQL> ROLLBACK;
    SQL> ALTER TABLE EMPLOYEES
    cont> DISABLE TRIGGER EMPLOYEE_ID_CASCADE_DELETE;
    SQL> -- Commit the alter operation and disconnect to ensure that
    SQL> -- the next connection will have the trigger disabled.
    SQL> COMMIT;
    SQL> DISCONNECT DEFAULT;
    SQL> ATTACH 'FILENAME MF_PERSONNEL.RDB';
    SQL> DELETE FROM EMPLOYEES WHERE EMPLOYEE_ID ='00164';
    1 row deleted
    SQL> -- Show that with the trigger disabled, a deletion of
    SQL> -- employee 00164 from the EMPLOYEES table does not
    SQL> -- trigger a deletion for that employee from the
    SQL> -- JOB_HISTORY table.
    SQL> SELECT * FROM JOB_HISTORY WHERE EMPLOYEE_ID='00164';
    EMPLOYEE_ID   JOB_CODE   JOB_START     JOB_END       DEPARTMENT_CODE
       SUPERVISOR_ID
     00164         DMGR       21-Sep-1981   NULL          MBMN
       00228
     00164         SPGM        5-Jul-1980   20-Sep-1981   MCBM
       00164
    2 rows selected

例10: NOT NULL制約の削除

次の例では、ALTER TABLEによるNOT NULL制約の削除を示します。

    SQL> create table MY_TABLE (a integer not null);
    SQL>
    SQL> show table (constraint) MY_TABLE
    Information for table MY_TABLE

    Table constraints for MY_TABLE:
    MY_TABLE_A_NOT_NULL
     Not Null constraint
     Column constraint for MY_TABLE.A
     Evaluated on UPDATE, NOT DEFERRABLE
     Source:
            MY_TABLE.A NOT null

    Constraints referencing table MY_TABLE:
    No constraints found

    SQL>
    SQL> alter table MY_TABLE
    cont>     alter column A NULL;
    SQL>
    SQL> show table (constraint) MY_TABLE
    Information for table MY_TABLE

    Table constraints for MY_TABLE:
    No constraints found

    Constraints referencing table MY_TABLE:
    No constraints found

    SQL>

例11: 既存の表へのIDENTITY列の追加

    SQL> alter table EMPLOYEES
    cont>   add column SEQUENCE_ID integer identity (1000, 10)
    cont>   comment is 'Add unique sequence number for every employee';
    SQL>
    SQL> show table (column) EMPLOYEES
    Information for table EMPLOYEES

    Columns for table EMPLOYEES:
    Column Name                     Data Type        Domain
    -----------                     ---------        ------
    EMPLOYEE_ID                     CHAR(5)          ID_NUMBER
    .
    .
    .
    SEQUENCE_ID                     INTEGER
     Computed:      IDENTITY
     Comment:       Add unique sequence number for every employee

    SQL> select EMPLOYEE_ID, SEQUENCE_ID from employees;
     EMPLOYEE_ID   SEQUENCE_ID
     00164                1000
     00165                1010
    .
    .
    .
     00418                1970
     00435                1980
     00471                1990
    100 rows selected
    SQL>
    SQL> show sequence EMPLOYEES
         EMPLOYEES
     Sequence Id: 2
     Initial Value: 1000
     Minimum Value: 1000
     Maximum Value: (none)
     Next Sequence Value: 2000
     Increment by: 10
     Cache Size: 20
     No Order
     No Cycle
     No Randomize
     Wait
     Comment:       column IDENTITY sequence
    SQL>

例12: COMPUTED BY列の変更

    SQL> create table ttt (a integer, c computed by CURRENT_USER);
    SQL> insert into ttt (a) values (10);
    1 row inserted
    SQL> select * from ttt;
               A   C
              10   SMITH
    1 row selected
    SQL>
    SQL> show table (column) ttt
    Information for table TTT

    Columns for table TTT:
    Column Name                     Data Type        Domain
    -----------                     ---------        ------
    A                               INTEGER
    C                               CHAR(31)
             UNSPECIFIED 31 Characters,  31 Octets
     Computed:       by CURRENT_USER

    SQL>
    SQL> alter table ttt
    cont>     alter c
    cont>     computed by upper (substring (current_user from 1 for 1))
    cont>           || lower (substring (current_user from 2));
    SQL>
    SQL> show table (column) ttt
    Information for table TTT

    Columns for table TTT:
    Column Name                     Data Type        Domain
    -----------                     ---------        ------
    A                               INTEGER
    C                               VARCHAR(31)
             UNSPECIFIED 31 Characters,  31 Octets
     Computed:       by upper (substring (current_user from 1 for 1))
                    || lower (substring (current_user from 2))

    SQL>
    SQL> select * from ttt;
               A   C
              10   Smith
    1 row selected
    SQL>

# ALTER TRIGGER文

> 既存のトリガーの有効化と無効化を切り替えたり、名前を変更します。変更されるのは、ALTER TRIGGER文を含むトランザクションがコミットされた後です。

## 環境

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

> - 対話型SQL内

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

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

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

## 形式

## 引数

> ### COMMENT IS 'string'

> トリガーに関するコメントを追加します。SQLでは、SHOW文の実行時にコメントのテキストが表示されます。コメントは一重引用符（'）で囲み、コメント内の複数の行はスラッシュ（/）で区切ります。

> ### DISABLE

> 有効になっているトリガーを無効にします。

> ### ENABLE

> 無効になっているトリガーを有効にします。

> ### RENAME TO

> 変更するトリガーの名前を変更します。詳細は、「RENAME文」を参照してください。新規名がシノニム名である場合は、エラーが発生します。

> RENAME TO句には、このデータベースに対して有効なシノニムが必要です。「ALTER DATABASE文」のSYNONYMS ARE ENABLED句に関する説明を参照してください。これらのシノニムがデータベース定義またはアプリケーションによって使用されていない場合は、削除される可能性があります。

> ### trigger-name

> 既存のトリガーの名前です。

## 使用方法

> - ユーザーには、トリガー表に対するALTER権限が必要です。

> - さらに、ALTER TRIGGER DISABLE文を使用するユーザーには表に対するDROP権限（トリガーが現在有効になっている場合）、ALTER TRIGGER ENABLE文を使用するユーザーには表に対するCREATE権限（トリガーが現在無効になっている場合）も必要です。

> - デフォルトでは、トリガーは作成された時点では有効になっています。

> - トリガーが無効化されると、INSERT文、UPDATE文またはDELETE文により実行されることはありません。

> - すでに無効化された制約が再有効化されると、そのトリガーは新規の問合せに対してのみ有効になります。すでにオープンされている既存のカーソルからは、有効になったトリガーは認識されません。そのため、トリガーを有効化または無効化する場合は、すべての問合せで整合性のある動作が確保されるよう、コミット後に接続を切断して再度アタッチすることをお薦めします。

> - SHOW TRIGGERS文を使用すると、トリガーに関する設定（無効化または有効化）を表示できます。

> - COMMENT IS句は、COMMENT ON TRIGGER文と同義です。

## 例

> 例1: トリガーの無効化

> 次の例で、EMPLOYEE_ID_CASCADE_DELETEトリガーが有効なときに、EMPLOYEESからレコードを削除することにより、対応するJOB_HISTORY内のレコードが削除されることを示しています。トリガーを無効にすると、それ以降にEMPLOYEESからレコードを削除しても、JOB_HISTORY表からの削除はトリガーされません。

>     SQL> SELECT * FROM JOB_HISTORY WHERE EMPLOYEE_ID='00164';
>      EMPLOYEE_ID   JOB_CODE   JOB_START     JOB_END       DEPARTMENT_CODE
>        SUPERVISOR_ID
>      00164         DMGR       21-Sep-1981   NULL          MBMN
>        00228
>      00164         SPGM        5-Jul-1980   20-Sep-1981   MCBM
>        00164
>     2 rows selected
>     SQL> DELETE FROM EMPLOYEES WHERE EMPLOYEE_ID ='00164';
>     1 row deleted
>     SQL> SELECT * FROM JOB_HISTORY WHERE EMPLOYEE_ID='00164';
>     0 rows selected
>     SQL> ROLLBACK;
>     SQL> ALTER TRIGGER EMPLOYEE_ID_CASCADE_DELETE DISABLE;
>     SQL> COMMIT;
>     SQL> DISCONNECT DEFAULT;
>     .
>     .
>     .
>     SQL> DELETE FROM EMPLOYEES WHERE EMPLOYEE_ID ='00164';
>     1 row deleted
>     SQL> SELECT * FROM JOB_HISTORY WHERE EMPLOYEE_ID='00164';
>     EMPLOYEE_ID   JOB_CODE   JOB_START     JOB_END       DEPARTMENT_CODE
>        SUPERVISOR_ID
>      00164         DMGR       21-Sep-1981   NULL          MBMN
>        00228
>      00164         SPGM        5-Jul-1980   20-Sep-1981   MCBM
>        00164
>     2 rows selected

# ALTER USER文

> 指定したユーザー名のエントリを変更します。この変更は、ALTER USER文がコミットされた後の、次回のデータベース接続時に反映されます。

## 環境

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

> - 対話型SQL内

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

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

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

## 形式

## 引数

> ### ACCOUNT LOCK

> ### ACCOUNT UNLOCK

> ACCOUNT LOCK句により、ALTER USER文が適用されているユーザーによるデータベースへのアクセスを無効にします。ACCOUNT UNLOCK句により、ユーザーによるデータベースへのアクセスを許可します。

> ### COMMENT IS 'string'

> ユーザーに関するコメントを追加します。SQLでは、SHOW USERS文の実行時にコメントのテキストが表示されます。コメントは一重引用符（'）で囲み、コメント内の複数の行はスラッシュ（/）で区切ります。

> ### IDENTIFIED EXTERNALLY

> ユーザーがオペレーティング・システムを介して認証されるよう指定します。

> ### NOPROFILE

> 識別されたユーザーに割り当てられているプロファイルを削除します。現在プロファイルが割り当てられていない場合でもエラーは返されません。

> ### PROFILE

> ユーザーに割り当てる新規プロファイルを識別し、すでに割り当てられているプロファイルと置き換えます。指定されたプロファイル名は、既存のプロファイル名と一致する必要があります。

> ### PUBLIC

> データベース内のPUBLICユーザーです。このエントリにより、データベースにアクセスする匿名ユーザーを制御できるようになります。

> ### RENAME TO new-username

> ユーザー名を変更し、セキュリティ・プロファイルが存在する場合は、既存のユーザー名に関連付けられているそのセキュリティ・プロファイルを新規のユーザー名に割り当てます。これは、たとえばユーザーの個人名が（結婚などで）変わり、それに伴ってオペレーティング・システムでのアカウントが変更された場合などに使用できます。new-usernameには、現在データベースに存在するもの以外にする必要があります。

> ALTER USERコマンドが発行されると、既存のユーザー名はデータベースから削除され、new-usernameに置き換わります。SECURITY CHECKINGがINTERNALである場合、後続のSHOW PROTECTION文では新規のユーザー名が表示され、GRANT文およびREVOKE文では常に、new-usernameが必要となります。new-usernameは、ALTER USERコマンドを含むトランザクションがコミットされるまで、他のセッションでは表示されません。

> 詳細は、「RENAME文」を参照してください。

> ### username

> データベース内の既存のユーザー名です。

## 使用方法

> - ユーザーを変更するには、データベースに対するSECURITY権限またはOpenVMSのSECURITY権限が必要です。

> - SHOW USERS文を発行することにより、データベースに定義されている既存のユーザーを表示できます。

> - RENAME句を発行する場合は、新規のユーザー名がオペレーティング・システムのユーザー名として存在する必要があります。「例」の項を参照してください。

## 例

> 例1: ユーザー名の変更

>     SQL> create user KELLYN
>     cont>   identified externally
>     cont>   comment is 'User: Edward "Ned" Kelly';
>     SQL>
>     SQL> -- The alternate name must exists at the operating system level
>     SQL> alter user KELLYN rename to N_KELLY;
>     %RDB-E-NO_META_UPDATE, metadata update failed
>     -RDMS-E-NOSUCHPRF, unknown profile user or role
>     SQL>
>     SQL> -- Use the new corporate user-id naming scheme
>     SQL> alter user KELLYN
>     cont>   rename to NKELLY;

> 例2: ユーザーへのプロファイルの追加

> この例では、DEFAULTトランザクションを定義する新規プロファイルを作成し、ユーザーにプロファイルを割り当てます。ユーザーがデータベースに次回アタッチするときに、START DEFAULT TRANSACTION文では、定義されたプロファイルが標準のデフォルトのREAD ONLYのかわりに使用されます。

>     SQL> create profile READ_COMMITTED
>     cont> default transaction read write isolation level read committed wait 30;
>     SQL> show profile READ_COMMITTED
>           READ_COMMITTED
>           Default transaction read write wait 30
>             Isolation level read committed
>     SQL> alter user JAIN profile READ_COMMITTED;
>     SQL> show user JAIN;
>           JAIN
>           Identified externally
>           Account is unlocked
>           Profile: READ_COMMITTED
>           No roles have been granted to this user

# ALTER VIEW文

> この文を使用して、指定したビューを変更できます。

## 環境

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

> - 対話型SQL内

> - ホスト言語プログラムに埋め込まれる場合

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

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

## 形式

## 引数

> ### AS

> ビュー選択式および列の定義を置き換えます。選択リスト内の式の数は、元のCREATE VIEW列リストに一致している必要があります。

> ### COMMENT IS

> ビューに対して現在定義されているコメント（ある場合）を置き換えます。コメントは、対話型SQLのSHOW VIEW文によって表示されます。

> ### CONSTRAINT check-option-name

> WITH CHECK OPTION制約の名前を指定します。名前を省略すると、SQLにより名前が作成されます。ただし、Oracle Rdbでは、制約に常に名前を付けることをお薦めします。WITH CHECK OPTION制約に名前を付ける場合、その名前はスキーマで一意である必要があります。

> WITH CHECK OPTION制約の名前は、INSERT文またはUPDATE文が制約に違反した場合にINTEG_FAILエラー・メッセージによって使用されます。

> ### RENAME TO

> 現在のビューの名前を変更します。新規のビュー名は、既存のビュー、表、順序またはシノニムに存在しているもの以外にする必要があります。

> ### WITH CHECK OPTION

> ビューに対する更新操作に制限を課す制約です。チェック・オプション句により、表で挿入または更新された行がビューの定義に準拠していることを確認します。読取り専用のビューにはWITH CHECK OPTION句を指定しないでください。（SQLで読取り専用とみなされるビューは、「使用方法」を参照してください。）

> ### WITH NO CHECK OPTION

> ビューに対して現在定義されているチェック・オプション制約を削除します。

## 使用方法

> - 被参照ビューに対するALTER権限が必要です。

> - ALTER VIEW文によって、名前付きビュー用のRDB$RELATIONS表のRDB$LAST_ALTERED列がトランザクションのタイムスタンプで更新されます。

> - 列名およびその位置はどちらも、ALTER VIEW文では変更できません。またビューに対する列の追加および削除も実行できません。これらを変更するには、DROP VIEW文とCREATE VIEW文の両方を使用して、既存の定義を差し替える必要があります。

> - RENAME TO句を使用して、ビューの名前を変更できます。この句を使用するには、データベースでシノニムが有効になっていることが必要です。シノニムを有効にするには、ALTER DATABASE ...SYNONYMS ARE ENABLED文を使用します。
>   このビューの新規名には、古い名前を使用してシノニムが作成されます。この名前がデータベース定義またはアプリケーションによって使用されなくなった場合は、このシノニムは削除できます。
>   この句は、RENAME VIEW文と同義です。

> - COMMENT IS句を使用すると、ビューの既存のコメントを変更できます。この句は、COMMENT ON VIEW文と同義です。

> - 列式を変更することにより、その列を読取り専用に変更できるのみでなく、ルーチン、トリガーおよびアプリケーションの参照によってそれらの列に対するINSERT操作およびUPDATE操作が実行されないようにできます。これらの変更は実行時にレポートされます。
>   同様に、ビュー選択表の式が読取り専用になると、問合せの参照が失敗する場合があります。
>   次の機能を持つ選択式があるビューは、読取り専用ビューとみなされます。

>   - DISTINCT引数を使用して結果表から重複行を削除する機能

>   - FROM句で複数の表またはビューに名前を付ける機能

>   - FROM句で派生表を使用する機能

>   - 選択リストに統計関数を含める機能

>   - UNION句、EXCEPT DISTINCT (MINUS)句、INTERSECT DISTINCT句、GROUP BY句またはHAVING句を含める機能

> - AS句により、ビューが読取り専用に変更された場合、または主問合せにLIMIT TO ... ROWS句が含まれた場合、チェック・オプション制約は暗黙的に削除されます。

> - ALTER VIEW文では、DATA DEFINITIONモードで予約された表を参照できます。

## 例

> 例1: ビューに関するコメントの変更

> この例で示すように、ビューに関するコメントは、COMMENT IS句を使用して追加および変更できます。

>     SQL> show view (comment) current_job
>     Information for table CURRENT_JOB

>     SQL> alter view CURRENT_JOB
>     cont>   comment is 'Select the most recent job for the employee';
>     SQL> show view (comment) current_job
>     Information for table CURRENT_JOB

>     Comment on table CURRENT_JOB:
>     Select the most recent job for the employee

>     SQL>

> 例2: ビュー定義の列の結果の変更

> 次のビューでは、派生表および結合を使用して、各部門の従業員数が収集されています。ビューは、部門および会社の責任者が使用する複数のレポート・プログラムで使用されます。

>     SQL> create view DEPARTMENTS_SUMMARY
>     cont> as
>     cont> select department_code, d.department_name,
>     cont>        d.manager_id, jh.employee_count
>     cont> from departments d inner join
>     cont>      (select department_code, count (*)
>     cont>         from job_history
>     cont>         where job_end is null
>     cont>         group by department_code)
>     cont>           as jh (department_code, employee_count)
>     cont>      using (department_code);
>     SQL>
>     SQL> show view DEPARTMENTS_SUMMARY;
>     Information for table DEPARTMENTS_SUMMARY

>     Columns for view DEPARTMENTS_SUMMARY:
>     Column Name                     Data Type        Domain
>     -----------                     ---------        ------
>     DEPARTMENT_CODE                 CHAR(4)
>     DEPARTMENT_NAME                 CHAR(30)
>      Missing Value: None
>     MANAGER_ID                      CHAR(5)
>      Missing Value:
>     EMPLOYEE_COUNT                  INTEGER
>      Source:
>     select department_code, d.department_name,
>            d.manager_id, jh.employee_count
>     from departments d inner join
>          (select department_code, count (*)
>             from job_history
>             where job_end is null
>             group by department_code) as jh (department_code, employee_count)
>          using (department_code)

>     SQL>

> データベース管理者が、（問合せを使用して合計数を収集するのではなく）従業員数を保持するための列をDEPARTMENTS表に作成し、トリガーを介してEMPLOYEESおよびJOB_HISTORY（ここでは表示なし）の値を保持するという方法を採用したとします。この場合は、DROP VIEWおよびCREATE VIEWを使用しなくてもビューを簡易化できます。ALTER VIEW文を使用すると、他のビュー、トリガーおよびルーチンからこのビューへの依存性が保持されるため、このような変更の実装に必要な作業は最小限に抑えられます。

>     SQL> alter table DEPARTMENTS
>     cont>     add column EMPLOYEE_COUNT integer;
>     SQL>
>     SQL> alter view DEPARTMENTS_SUMMARY
>     cont> as
>     cont> select department_code, d.department_name,
>     cont>        d.manager_id, d.employee_count
>     cont> from departments d;
>     SQL>
>     SQL> show view DEPARTMENTS_SUMMARY;
>     Information for table DEPARTMENTS_SUMMARY

>     Columns for view DEPARTMENTS_SUMMARY:
>     Column Name                     Data Type        Domain
>     -----------                     ---------        ------
>     DEPARTMENT_CODE                 CHAR(4)
>      Missing Value: None
>     DEPARTMENT_NAME                 CHAR(30)
>      Missing Value: None
>     MANAGER_ID                      CHAR(5)
>      Missing Value:
>     EMPLOYEE_COUNT                  INTEGER
>      Source:
>     select department_code, d.department_name,
>            d.manager_id, d.employee_count
>     from departments d

>     SQL>

> 例3: ビュー定義のWITH CHECK OPTION制約の変更

> この例は、WITH CHECK OPTION制約により、挿入されたデータがビューのWHERE句に制限されることを示しています。この制約が削除されると、それ以降INSERTは制約されません。

>     SQL> create view TOLIVER_EMPLOYEE
>     cont> as select * from EMPLOYEES where employee_id = '00164'
>     cont> with check option;
>     SQL> insert into TOLIVER_EMPLOYEE (employee_id) value ('00000');
>     %RDB-E-INTEG_FAIL, violation of constraint TOLIVER_EMPLOYEE_CHECKOPT1 caused operation to fail
>     -RDB-F-ON_DB, on database DISK1:[DATABASES]MF_PERSONNEL.RDB;1
>     SQL>
>     SQL> alter view TOLIVER_EMPLOYEE with no check option;
>     SQL>
>     SQL> insert into TOLIVER_EMPLOYEE (employee_id) value ('00000');
>     1 row inserted
>     SQL>