ヘッダーをスキップ

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

戻る | 次へ |

列タイプ句として使用する場合は、列のタイプは参照されるPRIMARY KEY索引またはUNIQUE索引から継承されるよう指定します。データ型とドメインの両方が継承されます。

### RENAME TO

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

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

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

### SET DEFAULT default-value

列にデフォルト値を指定します。

### sql-and-dtr-clause

オプションのSQLおよびDATATRIEVEフォーマット句です。詳細は、第2.5節を参照してください。

列に対してフォーマット句を指定した場合、基となるドメインもフォーマット句を指定するものである場合、表定義のフォーマット句がドメイン定義のフォーマット句をオーバーライドします。

### start-with

IDENTITY列に作成された順序の開始値を指定する整数リテラル値です。省略された場合、デフォルトは1です。

### table-name

定義を変更するテーブルの名前です。

### UNIQUE

関連付けられた列の値が一意である必要があることを指定します。

## 使用方法

> - ALTER TABLE...ALTER COLUMN文によって、COMPUTED BY列またはAUTOMATIC列の式を変更できます。表に新規行のバージョンが作成され、データ型およびデータ長の変更が受け入れられます。列の定義がAUTOMATIC ASである場合、すでに格納されているデータは取得時に新規のデータ型に変換されます。
>   変更できるのは値式のみです。計算の型は変更できません。つまり、COMPUTED BY列からAUTOMATIC AS列へ、およびAUTOMATIC INSERT AS列からAUTOMATIC UPDATE AS列へは変更できません。

> - 表が同時に問合せに関与している場合、表を変更しようとすると失敗します。表を変更する前に、ユーザーはDISCONNECT文でデータベースからデタッチする必要があります。Oracle Rdbが最初に表などのオブジェクトにアクセスすると、そのオブジェクトにロックがかけられ、ユーザーがそのデータベースを終了するまで解除されません。このオブジェクトを更新しようとすると、もう1人のユーザーがこのオブジェクトにアクセスしているため、「lock conflict on client」のメッセージが表示されます。
>   同様に、表の変更中、ALTER TABLE文に対してCOMMIT文またはROLLBACK文を使用してトランザクションを完了するまで、ユーザーはその表に関連する問合せを実行できません。実行しようとすると、「lock conflict on client」のエラー・メッセージが表示されます。DDL操作の実行中は、システム表に対して通常のデータ・ロック・メカニズムが使用されます。（システム表には、データベース内のオブジェクトに関する情報が格納されています。）したがって、オブジェクトの更新中は、そのオブジェクトへの問合せがロックされます。これらのロックは、DDL操作がコミットまたはロールバックされるまで解除されません。

> - 変更できるのはテーブル定義のみです。ビュー定義は変更できません。

> - Oracle Rdbは、ストアド・プロシージャとメタデータ（表など）の間に依存関係を作成し、これは依存関係に基づいてコンパイルおよび格納されるため、言語セマンティクス依存性を持つ列を追加すると、列が存在するストアド・プロシージャが無効化されます。ストアド・プロシージャの無効化を切り替えるALTER TABLE文のリストは、「CREATE MODULE文」を参照してください。
>   ストアド・プロシージャ依存性の種類およびメタデータ変更によるストアド・プロシージャ無効化の詳細は、『Oracle Rdb7 Guide to SQL Programming』を参照してください。

> - 列が索引の一部である場合は、結果タイプが同じ型、長さ、精度、スケール、キャラクタ・セット、照合順番などを持つもの以外、そのデータ型を変更できません。たとえば、列EMPLOYEE_IDは表EMPLOYEEでID_DOMとして定義されます。次の例では、同じ型が使用される場合に変更できることを示します。

>       SQL> show table (column) EMPLOYEES
>       Information for table EMPLOYEES

>       Columns for table EMPLOYEES:
>       Column Name                     Data Type        Domain
>       -----------                     ---------        ------
>       EMPLOYEE_ID                     CHAR(5)          ID_NUMBER
>        Missing Value:
>          .
>          .
>          .
>       SQL> alter table employees alter column employee_id char(6);
>       %RDB-E-NO_META_UPDATE, metadata update failed
>       -RDMS-F-FLDINUSE, field EMPLOYEE_ID is referenced in index EMP_EMPLOYEE_ID
>       -RDMS-F-RELFLDNOC, field EMPLOYEE_ID in relation EMPLOYEES has not been changed

>       SQL> alter table employees alter column employee_id char(5);
>       SQL> show table (column) EMPLOYEES
>       Information for table EMPLOYEES

>       Columns for table EMPLOYEES:
>       Column Name                     Data Type        Domain
>       -----------                     ---------        ------
>       EMPLOYEE_ID                     CHAR(5)
>          .
>          .
>          .
>       SQL>

> - 次の場合には、表の列を削除できません。

>   - その列が、ビュー、制約またはトリガーなどの、他のデータベース・オブジェクトに参照されている場合。

>   - 索引がその列に基づいている場合。

> - 最初に条件を削除せずに、NOT NULL制約を参照して列のデータ型を変更できます。

> - データ型が同じである場合、制約および索引を持つ場合でも、ALTER COLUMN句によってAUTOMATIC列を更新可能なベース列に変更できます。

> - 計算されないベース列は、AUTOMATIC列に変更できます。古いデータは保持され、列が読取り専用になります。

> - 計算されないベース列は、COMPUTED BY列に変更できます。古いデータはアクセス可能にはならず（対話型SQLに対して警告が発行される）、その列に対する参照によってCOMPUTED BY式が評価されます。この列が索引で参照されると、ALTER TABLE文は失敗します。
>   列をベース列またはAUTOMATIC列に戻す変更を実行すると、古いバージョンの行データが表示可能になります。列がCOMPUTED BY列だったときに挿入された行はすべて、NULL値に返されます。

> - IDENTITY構文をALTER COLUMN句とともに使用できます。
>   表に既存のIDENTITY列が存在しない場合、表に対して順序が新規に作成されます。IDENTITYを使用しても列には既存の値が生成されないことを確認する必要があります。IDENTITYを使用することにより、挿入操作が失敗するためです。IDENTITY構文中のパラメータを使用して、適切なSTART WITH VALUEを指定するか、ALTER SEQUENCEコマンドを使用して順序を変更します。
>   表に既存のIDENTITY列が存在する場合、エラーが表示されます。

> - IDENTITY列がベース列、COMPUTED BY列、またはAUTOMATIC列などに変換される場合は、特殊順序が自動的に削除されます。

> - 列がDEFAULT（ベース列またはAUTOMATIC UPDATE AS列）を持ち、そのDEFAULTがCOMPUTED BY列、AUTOMATIC AS列、またはAUTOMATIC INSERT AS列に変換される場合、これらのタイプの列はDEFAULTと互換性がないため、デフォルト値が削除されます。

> - ALTER TABLE文を使用して、列のデフォルト値を追加または変更できます。
>   NULLやNot Applicableなどの値を使用し、列へのデータ挿入が行われないことを明確に示すことができます。通常、列に特定の値が含まれる場合は、その値をデフォルトとして使用できます。たとえば、従業員のほとんどがフル・タイムで稼働する場合は、フル・タイムをwork status列のデフォルト値にできます。
>   ドメインに基づく列にデフォルト値を指定する際に、そのドメインに対してもデフォルト値を指定している場合は、列に対するデフォルト値でドメインに対するデフォルト値がオーバーライドされます。
>   デフォルト値を削除するには、次のようにDROP DEFAULT句を使用します。

>       SQL> ALTER TABLE EMPLOYEES
>       cont>   ALTER BIRTHDAY
>       cont>   DROP DEFAULT;

>   ドメインのデフォルト値を変更または追加する場合、変更によるデータベース内の既存データに対する影響はありません。つまり、データベース内に列とともに格納されており、古いデフォルト値を含む行は変更されません。

> - ALTER TABLE文を使用して、列制約および表制約を追加または削除できます。
>   列制約と表制約の相違点の詳細は、「CREATE TABLE文」の「使用方法」を参照してください。

> - 制約を追加し、条件が満たされていない場合は、ALTER TABLE文が失敗します。

> - ビューのビュー定義を再度削除および作成して、新規列を表示させる必要があります。既存のビュー定義では、ALTER TABLE文で追加された列が表示されません。ビューが作成されたときに存在した列のみがビューによって表示されます。

> - FROM句によって（リポジトリ定義に基づいて）作成された表に対する変更、またはFROM句によって作成されたドメインに基づく表に対する変更は、他のスキーマおよびアプリケーションに影響する可能性があります。スキーマがPATHNAME句によって宣言されている場合、ALTER TABLE...ADD文またはALTER TABLE...ALTER文によって実行された変更は即時にリポジトリ・レコードまたはフィールド定義に書き込まれます。スキーマがFILENAME句で宣言されている場合は、次にINTEGRATE SCHEMA...ALTER DICTIONARY文が発行されたときに変更がリポジトリに書き込まれます。
>   この変更は、アプリケーションを再コンパイルする場合や、データベースをリポジトリに集約する場合に、同じリポジトリ定義を使用するアプリケーションや他のスキーマに影響を及ぼします。
>   そのため、リポジトリ定義に基づく表を変更する場合には注意が必要です。ALTER TABLE文による変更が、リポジトリ定義を共有する他のユーザーまたはアプリケーションに想定外の影響を及ぼしていないことを確認してください。

> - ALTER TABLE文を使用して、列名に関連付けられているキャラクタ・セットを変更できます。ただし、データを表に入力した後に変更を実行する場合、その表から行を選択しようとすると、SQLからデータ変換エラーが返される場合があります。

> - NCHAR、NATIONAL CHAR、NCHAR VARYINGまたはNATIONAL CHAR VARYINGデータ型を使用すると、各国語キャラクタ・データ型を指定できます。各国語キャラクタ・データ型は、データベースの作成時に、データベース各国語キャラクタ・セットによって定義されます。各国語キャラクタ・データ型の詳細は、第2.3節を参照してください。

> - データ型の長さは、文字またはオクテットで指定できます。デフォルトでは、データ型はオクテットで指定されます。ALTER TABLE文をSET CHARACTER LENGTH 'CHARACTERS'文またはSET DIALECT 'MIA'文とともに前に配置すると、長さを文字数に変更できます。SET CHARACTER LENGTH文およびSET DIALECT文の詳細は、「SET CHARACTER LENGTH文」を参照してください。

> - COMPUTED BY列は、DROP TABLE table-name CASCADE文により削除された表を参照する場合、NULLに設定されます。次に例を示します。

>       SQL> CREATE TABLE t1 (col1 INTEGER,
>       cont>                 col2 INTEGER);
>       SQL> --
>       SQL> CREATE TABLE t2 (x INTEGER,
>       cont>                 y COMPUTED BY (SELECT COUNT(*) FROM
>       cont>                   t1 WHERE t1.col1 = t2.x));
>       SQL> --
>       SQL> -- Assume values have been inserted into the tables.
>       SQL> --
>       SQL> SELECT * FROM t1;
>               COL1          COL2
>                  1           100
>                  1           101
>                  1           102
>                  2           200
>                  3           300
>       5 rows selected
>       SQL> SELECT * FROM t2;
>                  X             Y
>                  1             3
>                  3             1
>       2 rows selected
>       SQL> --
>       SQL> DROP TABLE t1 CASCADE;
>       SQL> SELECT * FROM t2;
>                  X             Y
>                  1             NULL
>                  3             NULL

>   COMPUTED BY列が新規のデータ型または値を持つように変更するか、表から列を削除できます。

> - 次の使用方法は、制約に適用されます。

>   - 制約またはトリガーを無効化するには、ALTER TABLE文の発行に必要なALTER権限に加えて、表に対するDROP権限が必要です。また、制約またはトリガーを有効化するには、表に対するCREATE権限が必要です。enable-clauseにNOVALIDATEオプションを指定するには、データベースに対するDBADM権限を保持する必要があります。

>   - 制約が無効化されると、INSERT文、UPDATE文またはDELETE文による評価は行われません。

>   - すでに無効化された制約が再有効化されると、その制約は、既存の行がすべて有効であることを確認するために検証されます。

>   - 表変更操作時に制約を有効化してNOVALIDATEを指定しない場合は、それぞれの制約が検証されます。参照整合性制約が失敗した場合、表変更操作も失敗し、失敗した制約の名前がレポートされます。

>   - Constraint修飾子およびConstraintオプションにより名前が付けられるまで、Constraint修飾子を持つRMU Verifyコマンドで無効化された制約は無視されます。Constraint修飾子によりすべての制約が指定される（オプションが指定されない）場合、または特定の表が指定される場合、すべての無効化された制約は無視されます。これによって、無効化された制約を再有効化することなく定期的にチェックできます。この機能は、実稼働中の制約チェックではオーバーヘッドが大きすぎる場合、またはアプリケーションによってすでに強制されている場合に便利です。

> - 次の使用方法は、AUTOMATIC列に適用されます。

>   - 挿入操作で列が省略されると、列のデフォルトおよびAUTOMATIC列は同じ機能を果します。ただし、次のような相違があります。

>     - AUTOMATIC列は、アプリケーションに対して読取り専用であるため、挿入操作中は参照できません。

>     - AUTOMATIC列は更新操作時にアクティブにできます。

>     - AUTOMATIC列を使用する場合、列に対してデータ型を提供しません。

>   - COMPUTED BY列を使用する場合とAUTOMATIC列を使用する場合では、次の相違点があることに注意してください。

>     - COMPUTED BY列では行のスペースを使用しませんが、AUTOMATIC列では使用します。

>     - COMPUTED BY列は、SELECT文、UPDATE文またはDELETE文によって列名が参照される場合など、行がフェッチされる場合に評価されます。AUTOMATIC列はINSERT文またはUPDATE文の実行中に評価されます。計算値は行の列に書き込まれ、SELECT文で返された値は格納された列の値になります。
>       たとえば、COMPUTED BY CURRENT_DATEとして定義された列により、問合せが実行された日付が返されます。選択したAUTOMATIC INSERT AS CURRENT_DATE列により、INSERTが実行された日付が返されます。この日付は問合せが実行された日付とは異なることがあります。

>   - AUTOMATIC列を使用する場合と表のトリガーを使用する場合では、次の相違点があることに注意してください。

>     - 挿入操作では、AFTER INSERTトリガーによりこの機能が提供されます。ただし、AUTOMATIC列によってトリガーのオーバーヘッドを削減できるため、表の管理が簡易化されます。

>     - 再帰的なトリガー・アクションが発生するため、更新中の行はトリガー・アクションによって変更できません。AUTOMATIC UPDATE列はトリガーおよび制約の実行の前に評価されます。

>   - AUTOMATIC列上で索引および制約を作成できます。AUTOMATIC列は、ユーザー・アプリケーションではなく、Oracle Rdbによって値を割り当てられた列を除く、他の列と同一です。

>   - AUTOMATIC列によって表に書き込まれたデータが正しくない場合、データベースに対するDBADMIN権限を持っている場合にはSET FLAGS 'AUTO_OVERRIDE'文を発行して列の読取り専用属性を一時的に停止できます。次に、更新問合せを実行して、正しくないデータを修正できます。詳細および例は、「SET FLAGS文」を参照してください。

>   - SET FLAGSオプションAUTO_OVERRIDEを使用すると、行を再ロードできるように、INSERT中に選択したAUTOMATIC列を更新したり、UPDATE中に不正に格納された値を調整できます。

>     - INSERT文の'AUTO_OVERRIDE'により、すべてのAUTOMATIC列への代入が許可され、列リストから省略された挿入AUTOMATIC列が通常どおり評価されます。

>     - UPDATE文の'AUTO_OVERRIDE'により、任意のAUTOMATIC列に対して値が直接代入されます。AUTOMATIC列は評価されません。

>   - INSERT文またはUPDATE文でDEFAULT句を使用すると、次のいずれかが適用されます。

>     - DEFAULT属性を含む新規の列が追加される場合、以前に挿入された行が新規の列の値としてDEFAULTを含むようにすべて更新されます。
>       新規の列がDEFAULT属性を含むドメインに基づく場合、同様に、表が更新されます。
>       新規の列が（暗黙的に挿入と更新の両方のアクションを示す）AUTOMATIC INSERT ASまたはAUTOMATIC ASである場合、以前に挿入された行はすべて、AUTOMATIC式によって新規の列の値として更新されます。

> - SQLにより、ALTER COLUMN句によって指定されるドメインおよびデータ型がすべて、全参照ビュー定義に自動的に伝播されます。
>   たとえば、列を変更して、データ型としてドメインを参照すると、その列を直接参照しているすべてのビュー列は変更された列の新規属性を反映するように更新されます。

>       SQL> CREATE DOMAIN d CHAR(1);
>       SQL> CREATE TABLE T (A d);
>       SQL> CREATE VIEW V (B,C) AS SELECT A, A||'X' FROM T;
>       SQL> SHOW VIEW (COL) V;
>       Information for table V

>       Columns for view V:
>       Column Name                     Data Type        Domain
>       -----------                     ---------        ------
>       B                               CHAR(1)
>       C                               CHAR(2)
>       SQL> ALTER DOMAIN d CHAR(5);
>       SQL> SHOW VIEW (COL) v;
>       Information for table V

>       Columns for view V:
>       Column Name                     Data Type        Domain
>       -----------                     ---------        ------
>       B                               CHAR(5)
>       C                               CHAR(6)

> - COMPUTED BY句、AUTOMATIC句またはDEFAULT句によって参照される表は、問合せで列が参照されるときにOracle RdbによってSHARED READ用として暗黙的に予約されます。このため、必要なロック・モードがSHARED READより高くないかぎり、これらの表をDECLARE TRANSACTION文またはSET TRANSACTION文で明示的に予約する必要はありません。
>   表またはビューから読取りを行うSQLファンクションがこれらのいずれかの式によってコールされる場合、これらの表は暗黙的には予約されません。DECLARE TRANSACTION文またはSET TRANSACTION文にリストされていない場合でも、LOCK TABLE文をファンクション（またはコールされた任意のプロシージャ）に含め、表に対する参照が許可されるようにする必要があります。

> - ALTER TABLE文によって1つ以上のLIST OF BYTE VARYING列が削除される場合は、ALTER TABLE文によって表の各行を読み取り、LIST値のポインタを記録する必要があります。このリストは、COMMIT時に処理され、LIST列データを削除します。したがって、データベース管理者は、表の変更時にこの時間も考慮する必要があります。
>   削除されたLIST列は、表の各行を更新し、LIST列をNULLに設定する必要があるため、EXCLUSIVE WRITEに対する表を予約することをお薦めします。このアクションにより、コミット時の処理のポインタがキューに入ります。予約モードにより、スナップショット・ファイルのI/Oが削除され、ロック・リソースの粒度が下げられ、仮想メモリーの使用率が低減されます。
>   LISTデータは表の外部に格納されるため、データベースにRESTRICTED ACCESS句でアタッチすることによりパフォーマンスが向上します。この句は、EXCLUSIVEアクセスに対して全LIST記憶域を予約するという副次的な効果があるため、LISTデータ削除中のスナップショットのI/Oが削除されます。

> - IDENTITY属性によって作成された順序は、SHOW SEQUENCESを使用して表示できます。またこの順序の属性は、ALTER SEQUENCE、COMMENT ON SEQUENCE、GRANTおよびREVOKEを使用して変更できます。
>   ただし、DROP SEQUENCEまたはRENAME SEQUENCEのどちらもこの特殊順序に対して許可されません。IDENTITY列のDROP TABLEまたはALTER TABLE...DROP COLUMNにより、識別順序が暗黙的に削除されます。表のRENAMEにより、一致する識別順序の名前が明示的に変更されます。

> - 制約および索引は、IDENTITY列に対して作成される場合があります。索引により問合せのパフォーマンスが向上し、PRIMARY KEYまたはUNIQUEなどの制約に他の表のFOREIGN KEY制約からの参照が可能になります。

> - ALTER TABLE文では、DATA DEFINITIONモードで予約された表を参照できます。
>   次の句がサポートされています。

>   - ADD CONSTRAINT

>   - ALTER COLUMN...CONSTRAINT

>   - ENABLE CONSTRAINT、ENABLE PRIMARY KEYおよびENABLE UNIQUE (...)

>   - DROP CONSTRAINT

>   - ALTER COLUMN ...NULL

>   - DISABLE CONSTRAINT、DISABLE PRIMARY KEYおよびDISABLE UNIQUE (...)

>   - DISABLE UNIQUE (...)

>   ADD句およびENABLE CONSTRAINT句は、制約の検証にI/Oを必要とする可能性があるため、同時実行が最も適しています。

> - ほとんどのALTER TABLE句では、SHARED DATA DEFINITIONに対して予約された表でサポートされます。例外は、表の構造を変更する句です。これらの句には、データ型を変更するADD COLUMN、DROP COLUMN、およびALTER COLUMNがあります。

## 例

> 例1: EMPLOYEES表への列の追加

>     SQL> ALTER TABLE EMPLOYEES ADD SALARY INTEGER(2);

> 例2: COLLEGES表への列の追加および変更

> 次の例では、2つの列を追加します。1つはCOLLEGES表の問合せの名前を持ちます。ALTER DOMAINは、POSTAL_CODE列を暗黙的に変更して5文字ではなく9文字を受け入れるようにする場合にも使用されます。

>     SQL> SHOW TABLE COLLEGES;
>     Information for table COLLEGES

>     Comment on table COLLEGES:
>     names and addresses of colleges attended by employees

>     Columns for table COLLEGES:
>     Column Name                     Data Type        Domain
>     -----------                     ---------        ------
>     COLLEGE_CODE                    CHAR(4)          COLLEGE_CODE_DOM
>      Primary Key constraint COLLEGES_PRIMARY_COLLEGE_CODE
>     COLLEGE_NAME                    CHAR(25)         COLLEGE_NAME_DOM
>     CITY                            CHAR(20)         CITY_DOM
>     STATE                           CHAR(2)          STATE_DOM
>     POSTAL_CODE                     CHAR(5)          POSTAL_CODE_DOM
>        .
>        .
>        .
>     SQL> ALTER TABLE COLLEGES
>     cont>   ADD RANKING INTEGER
>     cont>   ADD NUMBER_ALUMS INTEGER
>     cont>           QUERY_NAME IS 'ALUMS';
>     SQL> ALTER DOMAIN POSTAL_CODE_DOM CHAR(9);
>     SQL> SHOW TABLE COLLEGES;

>     Information for table COLLEGES

>     Comment on table COLLEGES:
>     names and addresses of colleges attended by employees

>     Columns for table COLLEGES:
>     Column Name                     Data Type        Domain
>     -----------                     ---------        ------
>     COLLEGE_CODE                    CHAR(4)          COLLEGE_CODE_DOM
>      Primary Key constraint COLLEGES_PRIMARY_COLLEGE_CODE
>     COLLEGE_NAME                    CHAR(25)         COLLEGE_NAME_DOM
>     CITY                            CHAR(20)         CITY_DOM
>     STATE                           CHAR(2)          STATE_DOM
>     POSTAL_CODE                     CHAR(9)          POSTAL_CODE_DOM
>     RANKING                         INTEGER
>     NUMBER_ALUMS                    INTEGER
>      Query Name:    ALUMS
>        .
>        .
>        .

> 例3: デフォルト値の追加および変更

>     SQL> /* Add a default value to the column HOURS_OVERTIME
>     ***> */
>     SQL> create table DAILY_SALES
>     cont>     (hours_overtime     int
>     cont>     ,hours_worked       int default 0
>     cont>     ,gross_sales        int
>     cont>     ,salesperson        char(20)
>     cont>     );
>     SQL>
>     SQL> /* Change the default value for the column HOURS_OVERTIME
>     ***> */
>     SQL> alter table DAILY_SALES
>     cont>     alter column HOURS_OVERTIME
>     cont>   set default 0;
>     SQL>
>     SQL> /* Insert the days sales figures into the table,
>     ***>    accepting the default values for HOURS_WORKED, and
>     ***>    HOURS_OVERTIME
>     ***> */
>     SQL> insert into DAILY_SALES (gross_sales, salesperson)
>     cont>     values (2567, 'Bartlett');
>     1 row inserted
>     SQL>
>     SQL> table DAILY_SALES;
>      HOURS_OVERTIME   HOURS_WORKED   GROSS_SALES   SALESPERSON
>                   0              0          2567   Bartlett
>     1 row selected
>     SQL>

> 例4: EMPLOYEES表からの制約の削除

> 制約名を検索するには、SHOW TABLES文を使用します。SHOW TABLES文により、表の定義の一部として定義されている制約のみでなく、表を参照するすべての制約が表示されます。そのため、CONSTRAINT句を使用して制約名を割り当てる場合、制約に関連付けられている表を識別するには常に接頭辞を使用すると便利です。

> このSHOW表示の制約DEGREES_FOREIGN1は、制約がEMPLOYEES表示に存在している場合でも、制約がEMPLOYEES表ではなくDEGREES表に関連付けられていることを示す表記規則に従います。

>     SQL> SHOW TABLE EMPLOYEES
>     Information for table EMPLOYEES

>     Comment on table EMPLOYEES:
>     personal information about each employee

>     Columns for table EMPLOYEES:
>     Column Name                     Data Type        Domain
>     -----------                     ---------        ------
>     EMPLOYEE_ID                     CHAR(5)          ID_DOM
>      Primary Key constraint EMPLOYEES_PRIMARY_EMPLOYEE_ID
>     LAST_NAME                       CHAR(14)         LAST_NAME_DOM
>     FIRST_NAME                      CHAR(10)         FIRST_NAME_DOM
>     MIDDLE_INITIAL                  CHAR(1)          MIDDLE_INITIAL_DOM
>     ADDRESS_DATA_1                  CHAR(25)         ADDRESS_DATA_1_DOM
>     ADDRESS_DATA_2                  CHAR(20)         ADDRESS_DATA_2_DOM
>     CITY                            CHAR(20)         CITY_DOM
>     STATE                           CHAR(2)          STATE_DOM
>     POSTAL_CODE                     CHAR(5)          POSTAL_CODE_DOM
>     SEX                             CHAR(1)          SEX_DOM
>     BIRTHDAY                        DATE             DATE_DOM
>     STATUS_CODE                     CHAR(1)          STATUS_CODE_DOM

>     Table constraints for EMPLOYEES:
>     EMPLOYEES_PRIMARY_EMPLOYEE_ID
>      Primary Key constraint
>      Column constraint for EMPLOYEES.EMPLOYEE_ID
>      Evaluated on COMMIT
>      Source:
>             EMPLOYEES.EMPLOYEE_ID PRIMARY KEY

>     EMP_SEX_VALUES
>      Check constraint
>      Table constraint for EMPLOYEES
>      Evaluated on COMMIT
>      Source:
>             CHECK          (
>                              SEX IN ('M', 'F', '?')
>                              )

>     EMP_STATUS_CODE_VALUES
>      Check constraint
>      Table constraint for EMPLOYEES
>      Evaluated on COMMIT
>      Source:
>             CHECK          (
>                              STATUS_CODE IN ('0', '1', '2', 'N')
>                              )

>     Constraints referencing table EMPLOYEES:
>     DEGREES_FOREIGN1
>      Foreign Key constraint
>      Column constraint for DEGREES.EMPLOYEE_ID
>      Evaluated on COMMIT
>      Source:
>             DEGREES.EMPLOYEE_ID REFERENCES EMPLOYEES (EMPLOYEE_ID)

>     JOB_HISTORY_FOREIGN1
>      Foreign Key constraint
>      Column constraint for JOB_HISTORY.EMPLOYEE_ID
>      Evaluated on COMMIT
>      Source:
>             JOB_HISTORY.EMPLOYEE_ID REFERENCES EMPLOYEES (EMPLOYEE_ID)

>     RESUMES_FOREIGN1
>      Foreign Key constraint
>      Column constraint for RESUMES.EMPLOYEE_ID
>      Evaluated on COMMIT
>      Source:
>             RESUMES.EMPLOYEE_ID REFERENCES EMPLOYEES (EMPLOYEE_ID)

>     SALARY_HISTORY_FOREIGN1
>      Foreign Key constraint
>      Column constraint for SALARY_HISTORY.EMPLOYEE_ID
>      Evaluated on COMMIT
>      Source:
>             SALARY_HISTORY.EMPLOYEE_ID REFERENCES EMPLOYEES (EMPLOYEE_ID)
>        .
>        .
>        .
>     SQL> ALTER TABLE EMPLOYEES DROP CONSTRAINT EMP_SEX_VALUES;

> 例5: NOT NULL制約のEMPLOYEES表への追加

>     SQL> ALTER TABLE EMPLOYEES
>     cont>   ALTER BIRTHDAY
>     cont>   CONSTRAINT E_BIRTHDAY_NOT_NULL
>     cont>   NOT NULL;

> EMPLOYEES表の行にNULLのBIRTHDAY列がある場合、ALTER文は失敗し、記述されている変更はいずれも実行されません。

> 例6: 表の列のキャラクタ・セットの変更

> データベースは、データベースのデフォルト・キャラクタ・セットおよび識別子キャラクタ・セットをDEC_KANJI、各国語キャラクタ・セットをKANJIと指定して作成されたことを前提とします。また、ROMAJI列は識別子キャラクタ・セットを指定する表COLOURSで作成されたことを前提とします。