ヘッダーをスキップ
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文は次の環境で使用できます。


形式



引数

COMMENT IS 'string'

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

DISABLE

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

ENABLE

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

RENAME TO

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

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

trigger-name

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

使用方法


例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文は次の環境で使用できます。


形式




引数

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

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

使用方法


例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文は次の環境で使用できます。


形式





引数

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

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

使用方法


例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>