日本語PDF

12.3 ALTER TABLE

目的

ALTER TABLE文を使用すると、非パーティション表、パーティション表、表パーティションおよび表サブパーティションの定義を変更できます。オブジェクト表またはオブジェクト列を含むリレーショナル表の場合は、ALTER TABLEを使用して型が変更された後に、表を参照する型の最新の定義に変換します。

注意:

マテリアライズド・ビュー・ログ表の操作では、可能な場合は常に、ALTER TABLE文ではなくALTER MATERIALIZED VIEW LOG文を使用することをお薦めします。

関連項目:

前提条件

表が自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、その表に対するALTERオブジェクト権限またはALTER ANY TABLEシステム権限が必要です。

パーティション化操作のその他の前提条件

表の所有者ではない場合、drop_table_partitionまたはtruncate_table_partition句を使用するには、DROP ANY TABLE権限が必要です。

add_table_partitionmodify_table_partitionmove_table_partitionおよびsplit_table_partition句を使用する場合、領域を確保する表領域に領域割当て制限が必要です。

パーティション化操作が子の参照パーティション表にカスケードする場合、子の参照パーティション表では権限は必要ありません。

exchange_partition_subpart句を使用する際、交換される表データにID列が含まれており、自分が交換に関与する両方の表の所有者ではない場合は、ALTER ANY SEQUENCEシステム権限が必要です。

オブジェクト型を持つ非パーティション表はパーティション化できません。

制約およびトリガーのその他の前提条件

一意キー制約または主キー制約を有効にする場合は、表に索引を作成するための権限が必要です。Oracle Databaseでは、表を含むスキーマにおいて、一意キーまたは主キーの列に索引を作成するため、この権限が必要になります。

トリガーを使用可能または使用禁止にする場合、トリガーが自分のスキーマ内にある必要があります。自分のスキーマにない場合は、ALTER ANY TRIGGERシステム権限が必要です。

関連項目:

索引を作成する場合に必要な権限については、「CREATE INDEX」を参照してください。

オブジェクト型を使用する場合のその他の前提条件

表を変更するときに列定義でオブジェクト型を使用する場合、そのオブジェクトが、変更する表と同じスキーマに属している必要があります。または、EXECUTE ANY TYPEシステム権限またはそのオブジェクト型に対するEXECUTEオブジェクト権限が必要です。

フラッシュバック・データ・アーカイブ操作のその他の前提条件

flashback_archive_clauseを使用して表の履歴追跡を有効化するには、履歴データが格納されるフラッシュバック・データ・アーカイブに対するFLASHBACK ARCHIVEオブジェクト権限が必要です。flashback_archive_clauseを使用して表の履歴追跡を無効にするには、FLASHBACK ARCHIVE ADMINSTERシステム権限を持っているか、またはSYSDBAとしてログインしている必要があります。

エディション・オブジェクトの参照に対するその他の前提条件

evaluation_edition_clauseまたはunusable_editions_clauseでエディションを指定するには、そのエディションに対するUSE権限が必要になります。

構文

alter_table::=

注意:

tableの後に句を指定する必要があります。必須の句はありませんが、1つ以上の句を指定する必要があります。

ALTER TABLE構文のグループは、次のとおりです。

各句の後には、そのコンポーネントの副次句の参照先が記載されています。

memoptimize_read_clause::=

memoptimize_write_clause

logging_clause::=

table_compression::=

inmemory_memcompress::=

inmemory_priority::=

inmemory_distribute::=

inmemory_duplicate::=

ilm_inmemory_policy::=

ilm_time_period::=

supplemental_table_logging::=

supplemental_log_grp_clause::=

supplemental_id_key_clause::=を参照

records_per_block_clause::=

row_movement_clause::=

flashback_archive_clause::=

mapping_table_clauses::=

index_compression::=

prefix_compression::=

advanced_index_compression::=

partition_extended_name::=

subpartition_extended_name::=

segment_attributes_clause::=

(physical_attributes_clause::=TABLESPACE SET: ALTER TABLEではサポートされていません、logging_clause::=)

clustering_join::=

cluster_clause::=

clustering_columns::=

clustering_column_group::=

clustering_when::=

zonemap_clause::=

column_definition::=

(identity_clause::=encryption_spec::=inline_constraintおよびinline_ref_constraint: constraint::=)

identity_clause::=

identity_options::=

evaluation_edition_clause::=

unusable_editions_clause::=

encryption_spec::=

modify_col_visibility::=

modify_col_substitutable::=

drop_column_clause::=

add_period_clause::=

period_definition::=

drop_period_clause::=

rename_column_clause::=

modify_collection_retrieval::=

drop_constraint_clause::=

column_properties::=

out_of_line_part_storage::=

object_type_col_properties::=

substitutable_column_clause::=

nested_table_col_properties::=

object_properties::=

(constraint::=inline_constraintinline_ref_constraintout_of_line_constraintout_of_line_ref_constraintを参照)

deferred_segment_creation::=

heap_org_table_clause::=

(table_compression::=inmemory_table_clause::= (CREATE TABLE構文の一部)、ilm_clause::=)

LOB_storage_parameters::=

(TABLESPACE SET: ALTER TABLEではサポートされていません、LOB_parameters::=storage_clause::=)

modify_LOB_storage_clause::=

LOB_retention_clause::=

LOB_deduplicate_clause::=

LOB_compression_clause::=

LOB_partitioning_storage::=

(TABLESPACE SET: ALTER TABLEではサポートされていません)

XMLType_column_properties::=

XMLType_storage::=

XMLSchema_spec::=

alter_XMLSchema_clause::=

external_table_data_props::=

external_part_subpart_data_props::=

read_only_clause::=

indexing_clause::=

alter_automatic_partitioning::=

alter_interval_partitioning::=

filter_condition::=

allow_disallow_clustering::=

drop_external_partition_attrs::=

partition_extended_names::=

subpartition_extended_names::=

split_nested_table_part::=

nested_table_partition_spec::=

subpartition_spec::=

partition_or_key_value::=

subpartition_or_key_value::=

exceptions_clause::=

range_values_clause::=

hash_subparts_by_quantity::=

partitioning_storage_clause::=

(TABLESPACE SET: ALTER TABLEではサポートされていません、table_compression::=index_compression::=inmemory_clause::=LOB_partitioning_storage::=)

update_global_index_clause::=

update_index_subpartition::=

parallel_clause::=

modify_to_partitioned::=

modify_opaque_type::=

index_properties::=

(global_partitioned_index::=local_partitioned_index::= (CREATE INDEXの一部)、index_attributes::=domain_index_clause: using_index_clauseではサポートされません)

index_attributes::=

(physical_attributes_clause::=logging_clause::=index_compression::=partial_index_clauseおよびparallel_clause: (using_index_clauseではサポートされません))

セマンティクス

ALTER TABLE文の多くの句の機能は、CREATE TABLE文での機能と同じです。これらの句の詳細は、「CREATE TABLE」を参照してください。

注意:

ALTER TABLE文を実行すると、変更した表にアクセスするプロシージャおよびストアド・ファンクションが無効になる場合があります。無効になる条件および具体的な状況については、『Oracle Database開発ガイド』を参照してください。

schema

表が含まれているスキーマを指定します。schemaを指定しない場合、表は自分のスキーマ内にあるとみなされます。

table

変更する表の名前を指定します。

注意:

変更対象の表が、1つ以上のマテリアライズド・ビューのマスター表である場合は、そのマテリアライズド・ビューの状態がINVALIDに設定されます。無効なマテリアライズド・ビューは、クエリー・リライトには使用できず、リフレッシュもできません。マテリアライズド・ビューを再び有効にする方法は、「ALTER MATERIALIZED VIEW」を参照してください。

関連項目:

マテリアライズド・ビューに関する一般的な情報については、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

一時表の変更の制限事項

一時表の列を変更または削除したり、一時表の名前を変更できます。ただし、一時表に対して次のことはできません。

  • ネストした表型の列の追加(他の型の列は追加できます)。

  • 追加または変更された列の参照整合性(外部キー)制約の指定。

  • 追加または変更されたLOB列に対する次のLOB_storage_clauseの句の指定: TABLESPACEstorage_clauselogging_clauseallocate_extent_clauseまたはdeallocate_unused_clause

  • physical_attributes_clausenested_table_col_propertiesparallel_clauseallocate_extent_clausedeallocate_unused_clauseまたは索引構成表(IOT)句の指定。

  • パーティション表と一時表の間でのパーティションの交換。

  • logging_clauseの指定。

  • MOVEの指定。

  • INVISIBLEの列の追加、または既存の列をINVISIBLEにするための変更。

外部表の変更の制限事項

外部表の列を追加、削除または変更できます。ただし、外部表に対して次のことはできません。

  • LONG、LOBまたはオブジェクト型の列の追加、または外部表の列のデータ型をこれらのデータ型のいずれかに変換

  • 外部表の記憶域パラメータの変更。

  • logging_clauseの指定。

  • MOVEの指定。

  • INVISIBLEの列の追加、または既存の列をINVISIBLEにするための変更。

memoptimize_read_clause

この句を使用して、頻度の高いデータ問合せ操作のパフォーマンスを向上させます。MEMOPTIMIZE_POOL_SIZE初期化パラメータは、memoptimizeプールのサイズを制御します。この機能は、SGAから追加のメモリーを使用することに注意してください。

  • この句は、表の最上位の属性として指定する必要があり、パーティション・レベルまたはサブパーティション・レベルで指定することはできません。

  • 表からデータを読み取る前に、MEMOPTIMIZE FOR READに対して表を明示的に有効にする必要があります。

  • 表が不要になった場合は、NO MEMOPTIMIZE FOR READに対して表を明示的に無効にする必要があります。

memoptimize_write_clause

高速収集を有効にするには、この句を使用します。高速収集は、ディスクに書き込む前に挿入を格納するバッファ・プールを利用して、モノのインターネット(IoT)アプリケーションから1行データを挿入する頻繁な処理を最適化します。

alter_table_properties

alter_table_clausesを使用すると、データベースの表を変更できます。

physical_attributes_clause

physical_attributes_clauseを使用すると、PCTFREEPCTUSEDおよびINITRANSパラメータの値と記憶特性を変更できます。これらのパラメータおよび特性の詳細は、physical_attributes_clause」およびstorage_clause」を参照してください。

表の物理属性の変更の制限事項

物理属性の変更には、次の制限事項があります。

  • PCTUSEDパラメータは、索引構成表の索引セグメントに対して指定できません。

  • ローカル管理表領域にある表の記憶域属性を変更しようとすると、Oracle Databaseエラーが発生します。ただし、パーティション表のセグメントのいくつかがローカル管理表領域にあり、それ以外のセグメントがディクショナリ管理表領域にある場合は、ディクショナリ管理表領域のセグメントの記憶域属性は変更されますが、ローカル管理表領域のセグメントの記憶域属性は変更されず、エラーも発生しません。

  • 自動セグメント領域管理のセグメントの場合は、PCTUSED設定の変更は無視されます。PCTFREE設定を変更した場合、その変更をセグメントに割当て済のブロックに実装するには、DBMS_REPAIR.SEGMENT_FIX_STATUSプロシージャを実行する必要があります。

表の物理属性の変更の注意事項

この句で指定する値は、次のように表に影響します。

  • 非パーティション表の場合、作成時に表に指定した値は新しく指定した値によって上書きされます。

  • レンジ・パーティション表、リスト・パーティション表またはハッシュ・パーティション表の場合、新しく指定した値がその表のデフォルト値およびすべての既存パーティションに対する実際の値となり、そのパーティションにすでに設定されていた値は上書きされます。既存のパーティション値を上書きせずにデフォルトの表属性を変更する場合は、modify_table_default_attrs句を使用してください。

  • コンポジット・パーティション表の場合、新しく指定した値がその表とその表のすべてのパーティションのデフォルト値、およびその表のすべてのサブパーティションに対する実際の値となり、そのサブパーティションにすでに設定されていた値は上書きされます。既存のサブパーティションの値を上書きせずにデフォルトのパーティション属性を変更する場合は、FOR PARTITION句とともにmodify_table_default_attrs句を使用してください。

logging_clause

logging_clauseを使用すると、表のロギング属性を変更できます。また、logging_clauseでは、後続のALTER TABLE ... MOVEおよびALTER TABLE ... SPLIT操作のログを記録するかどうかを指定します。

modify_table_default_attrs句とともにこの句を使用した場合、パーティション表のロギング属性が影響を受けます。

関連項目:

table_compression

table_compression句は、ヒープ構成表に対してのみ有効です。この句を使用すると、ディスクおよびメモリーの使用量を削減するために、データ・セグメントを圧縮するかどうかを指定できます。この句のセマンティクスの詳細および表の圧縮を使用したオブジェクトの作成方法の詳細は、「CREATE TABLE」のtable_compression」を参照してください。

注意:

初めて、圧縮データが追加されるように表を変更する場合は、表のすべてのビットマップ索引およびビットマップ索引パーティションにUNUSABLEのマークを付ける必要があります。

inmemory_table_clause

この句を使用して、インメモリー列ストア(IM列ストア)の表または表の列を有効化または無効化するか、表または表の列のインメモリーの属性を変更します。

  • INMEMORYを指定して、IM列ストアの表を有効化するか、IM列ストアにすでに有効化されている表のinmemory_attributesを変更します。

  • NO INMEMORYを指定して、IM列ストアの表を無効化します。

  • inmemory_column_clauseを指定して、IM列ストアの表の列を有効化または無効化するか、表の列のinmemory_memcompress設定を変更します。IM列ストアに対して表またはパーティションが無効になっているときにこの句を指定した場合、列の設定は、その後IM列ストアに対して表またはパーティションが有効化されたときに有効になります。IM列ストアに対して表またはパーティションが有効になっているか無効になっているかにかかわらず、列に対してNO INMEMORYを指定した場合は、列に対して以前に指定されたinmemory_memcompress設定が失われます。この句のセマンティクスの詳細は、「CREATE TABLE」の「inmemory_column_clause」を参照してください。

このinmemory_table_clauseのセマンティクスはCREATE TABLEinmemory_table_clauseと同じですが、次の追加点があります。

  • inmemory_memcompress句を指定して、IM列ストアにすでに有効化されている表のデータ圧縮方法を変更する場合、以前に特定のデータ圧縮方法を割り当てた列にデータ圧縮方法が保持されます。この句の詳細は、CREATE TABLEinmemory_memcompress句を参照してください。

  • inmemory_distribute句を指定する際に1つの副句を省略した場合、設定は変更されないままです。つまり、AUTOまたはBY句のみを指定した場合、表のFOR SERVICE設定は変更されないままで、FOR SERVICE句のみを指定した場合、表のAUTOまたはBY設定は変更されないままです。両方の副句を省略してDISTRIBUTEキーワードのみを指定した場合、表にはDISTRIBUTE AUTO設定が割り当てられ、FOR SERVICE設定は変更されないままです。この句の詳細は、CREATE TABLEinmemory_distribute句を参照してください。

  • NO INMEMORYを指定してIM列ストアのパーティション表または非パーティション表を無効化すると、列レベルのインメモリー設定が失われます。その後、IM列ストアの表を有効化すると、表を有効化するときに特に指定しないかぎり、すべての列で表のインメモリー設定が使用されます。

  • NO INMEMORYを指定してIM列ストアのパーティションを無効化した場合は、表のすべてのパーティションが無効化されていても、列レベルのインメモリー設定が保持されます。その後、IM列ストアの表またはパーティションを有効化すると、表またはパーティションを有効化するときに特に指定しないかぎり、列レベルのインメモリー設定が有効になります。

  • 表が現在IM列ストアに移入されており、PRIORITY以外の表のinmemory_attributeを変更した場合、データベースではIM列ストアからその表を削除します。再移入動作はPRIORITY設定によって異なります。

inmemory_clause

この句を使用して、IM列ストアの表のパーティションを有効化または無効化するか、表のパーティションのインメモリーのパラメータを変更します。この句のセマンティクスは、CREATE TABLEおよびALTER TABLEで同じです。この句のセマンティクスの詳細は、CREATE TABLEのドキュメントのinmemory_clauseを参照してください。

ORACLE_HIVEORACLE_HDFS、およびORACLE_BIGDATAのドライバを使用する非パーティション表にIMEMORYを指定できます。

制限

ディスク上のセグメントが64KB以下の場合、IM列ストアに移入されません。したがって、IM列ストアに対して有効になっている小規模データベース・オブジェクトは、移入されないことがあります。

ilm_clause

この句を使用すると、表の自動データ最適化ポリシーの追加、削除、有効化または無効化を実行できます。

ADD POLICY

この句を指定すると、表にポリシーを追加できます。

ポリシーを指定するには、ilm_policy_clauseを使用します。この句のセマンティクスの詳細は、「ilm_policy_clause」を参照してください

ポリシーにはPnという形式の名前が割り当てられます。nは整数値です。

{ DELETE | ENABLE | DISABLE } POLICY

これらの句を指定して、表のポリシーの削除、表のポリシーの有効化または表のポリシーの無効化をそれぞれ実行します。

ilm_policy_nameには、ポリシーの名前を指定します。ポリシー名は、DBA_ILMPOLICIESビューのPOLICY_NAME列に問い合せて確認できます。

{ DELETE_ALL, ENABLE_ALL, DISABLE_ALL }

これらの句を指定して、表のすべてのポリシーの削除、表のすべてのポリシーの有効化または表のすべてのポリシーの無効化をそれぞれ実行します。

関連項目:

自動データ最適化ポリシーの管理の詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

ilm_policy_clause

この句を使用すると、自動データ最適化ポリシーを指定できます。ilm_compression_policy句を使用して圧縮ポリシーを指定し、ilm_tiering_policy句を使用して記憶域階層化ポリシーを指定し、ilm_inmemory_policy句を使用してインメモリー列ストア・ポリシーを指定できます。

ilm_compression_policy

この句を使用すると、圧縮ポリシーを指定できます。このタイプのポリシーは、指定された条件が満たされた場合、データを圧縮するようデータベースに指示します。SEGMENTGROUPまたはROW句を使用して、セグメントレベル、グループレベルまたは行レベルの圧縮ポリシーを指定します。

table_compression

table_compression句を使用して、圧縮タイプを指定します。この句は、セグメントレベルおよびグループレベルの圧縮ポリシーに適用されます。

現在の圧縮タイプより高い圧縮タイプを指定する必要があります。圧縮タイプを、最低のものから最高のものの順に示します。

  • NOCOMPRESS
  • ROW STORE COMPRESS BASIC
  • ROW STORE COMPRESS ADVANCED
  • COLUMN STORE COMPRESS FOR QUERY LOW
  • COLUMN STORE COMPRESS FOR QUERY HIGH
  • COLUMN STORE COMPRESS FOR ARCHIVE LOW
  • COLUMN STORE COMPRESS FOR ARCHIVE HIGH

この句のセマンティクスの詳細は、table_compression」を参照してください。

SEGMENT

SEGMENTを指定して、セグメントレベルの圧縮ポリシーを作成します。このタイプのポリシーは、AFTER句で指定した条件が満たされた場合またはON句で指定したPL/SQLファンクションがTRUEを返す場合に表セグメントを圧縮するようデータベースに指示します。

GROUP

GROUPを指定して、グループレベルの圧縮ポリシーを作成します。このタイプのポリシーは、AFTER句で指定した条件が満たされた場合またはON句で指定したPL/SQLファンクションがTRUEを返す場合に、表とその従属オブジェクト(索引やセキュア・ファイルLOBなど)を圧縮するようデータベースに指示します。

ROW

ROWを指定して、行レベルの圧縮ポリシーを作成します。このタイプのポリシーは、指定された期間にすべての行が変更されていないデータベース・ブロックを圧縮するようデータベースに指示します。行レベルのポリシーを作成する場合は、ROW STORE COMPRESS ADVANCEDまたはCOLUMN STORE COMPRESS FOR QUERY圧縮を指定し、AFTER ilm_time_period OF NO MODIFICATIONを指定する必要があります。ROW STORE COMPRESS ADVANCEDおよびCOLUMN STORE COMPRESS FOR QUERY句の完全なセマンティックスについては、「table_compression」を参照してください。

AFTER

この句を使用すると、ポリシーを有効にするために満たす必要のある条件を定義できます。条件は、ilm_time_period句で指定する時間と、次のいずれかの条件タイプで構成されます。

  • OF NO ACCESS: 指定した時間にわたってtableがアクセスされないと、ポリシーが有効になります。

  • OF NO MODIFICATION: 指定した時間にわたってtableが変更されないと、ポリシーが有効になります。

  • OF CREATION: tableが作成されてから指定した時間が経過すると、ポリシーが有効になります。

ilm_time_period

その期間の経過後に条件が満たされている必要がある期間の長さを、日数、月数または年数で指定します。integerに、正の整数を指定します。DAYキーワードとDAYSキーワードは、区別なしに使用できますが、意味を明確にするために用意されています。これはMONTHキーワードとMONTHSキーワード、およびYEARキーワードとYEARSキーワードの場合も同様です。

ON

この句を使用すると、ブール値を戻すPL/SQLファンクションを指定できます。function_nameに、ファンクションの名前を指定します。このファンクションがTRUEを返すと、ポリシーが有効になります。

注意:

ON function_name句は、表領域ではサポートされません。

ilm_tiering_policy

この句を使用すると、記憶域階層化ポリシーを指定できます。このタイプのポリシーは、特定の条件が満たされたか、またはデータ使用量が指定された制限に達したいずれかの場合に、データを指定された表領域に移行するようデータベースに指示します。SEGMENTまたはGROUP句を使用して、セグメントレベルまたはグループレベルのポリシーを指定します。データは、読取り/書込み表領域または読取り専用表領域に移行できます。

TIER TO tablespace

この句を使用すると、データを読取り/書込みtablespaceに移行できます。

  • ON function句を指定した場合、functionがTRUEを返すときにデータが移行されます。この句のセマンティックスの詳細は、ON句を参照してください。

  • ON function句を省略すると、表領域割当てのデータ使用量がTBS_PERCENT_USEDで定義された割合に達した場合、データが移行されます。表領域割当ての空き領域量がTBS_PERCENT_FREEで定義されたパーセントに達するだけの十分な量のデータが可能なかぎり移行されます。DBMS_ILM_ADMINパッケージの定数であるTBS_PERCENT_USEDおよびTBS_PERCENT_FREEの詳細は、Oracle Database PL/SQLパッケージおよびタイプ・リファレンスを参照してください。

TIER TO tablespace READ ONLY

この句を使用すると、データを読取り専用表領域に移行できます。データを表領域に移行する際、データベースは一時的に表領域を読取り/書込みモードにしてデータを移行し、その後表領域を読取り専用モードに戻します。

  • AFTER句を指定した場合、指定した条件が満たされたときにデータが移行されます。この句のセマンティックスの詳細は、AFTER句を参照してください

  • ON function句を指定した場合、functionがTRUEを返すときにデータが移行されます。この句のセマンティックスの詳細は、ON句を参照してください。

SEGMENT | GROUP

SEGMENTを指定すると、セグメントレベルの記憶域階層化ポリシーを作成できます。このタイプのポリシーは、表セグメントをtablespaceに移行するようデータベースに指示します。GROUPを指定して、グループレベルの記憶域階層化ポリシーを作成します。このタイプのポリシーは、表とその従属オブジェクト(索引やセキュア・ファイルLOBなど)をtablespaceに移行するようデータベースに指示します。デフォルトはSEGMENTです。

注意:

ON function_name句は、表領域ではサポートされません。

ilm_inmemory_policy

この句を使用すると、インメモリー列ストア(IM列ストア)ポリシーを指定できます。このタイプのポリシーは、指定した条件が満たされた場合に、IM列ストアの表を有効化または無効化するか、IM列ストアの表の圧縮方法を変更するようにデータベースに指示します。

SET INMEMORY

この句を使用すると、指定された条件が満たされた場合に、IM列ストアの表を有効化できます。オプションでinmemory_attributes句を使用して、表データをIM列ストアに格納する方法を指定できます。この句のセマンティクスの詳細は、「inmemory_attributes」を参照してください。

MODIFY INMEMORY

この句を使用すると、指定された条件が満たされた場合に、IM列ストアに格納されている表データの圧縮方法を変更できます。IM列ストアに対して表が有効化されている必要があります。

現在の圧縮方法より高い圧縮方法を指定する必要があります。圧縮方法を、最低のものから最高のものの順に示します。

  • NO INMEMORY
  • MEMCOMPRESS FOR DML
  • MEMCOMPRESS FOR QUERY LOW
  • MEMCOMPRESS FOR QUERY HIGH
  • MEMCOMPRESS FOR CAPACITY LOW
  • MEMCOMPRESS FOR CAPACITY HIGH

この句のセマンティクスの詳細は、「inmemory_memcompress」を参照してください。

NO INMEMORY

この句を使用すると、指定された条件が満たされた場合に、IM列ストアの表を無効化できます。

SEGMENT

SEGMENTキーワードはオプションで、セマンティクスを明確化するために使用されます。IM列ストア・ポリシーは、常にセグメントレベルのポリシーです。

AFTER | ON

AFTERおよびON句を使用すると、IM列ストア・ポリシーが有効になるために満たされる必要がある条件を指定できます。

  • AFTER句を指定すると、指定された条件が満たされたときにポリシーが有効になります。この句のセマンティックスの詳細は、AFTER句を参照してください

  • ONファンクション句を指定した場合は、ファンクションからTRUEが戻されたときにポリシーが有効になります。この句のセマンティックスの詳細は、ON句を参照してください。

注意:

ON function_name句は、表領域ではサポートされません。

関連項目:

IM列ストアでの自動データ最適化ポリシーの使用方法の詳細は、『Oracle Database In-Memoryガイド』を参照してください。

supplemental_table_logging

supplemental_table_logging句を使用すると、REDOログ・グループ、またはサプリメンタル・ログが記録されるREDOログ・グループの1つ以上の列を追加または削除できます。

  • ADD句でsupplemental_log_grp_clauseを使用すると、指定したサプリメンタル・ログ・グループを作成できます。supplemental_id_key_clauseを使用すると、システム生成のログ・グループを作成できます。

  • DROP句でGROUP log_group構文を使用すると、指定したサプリメンタル・ログ・グループを削除できます。supplemental_id_key_clauseを使用すると、システム生成のログ・グループを削除できます。

supplemental_log_grp_clauseおよびsupplemental_id_key_clauseは、CREATE TABLE文およびALTER TABLE文で同じセマンティクスを持ちます。これらの句の詳細は、「CREATE TABLE」の「supplemental_log_grp_clause」および「supplemental_id_key_clause」を参照してください。

関連項目:

サプリメンタルREDOログ・グループの詳細は、『Oracle Data Guard概要および管理』を参照してください。

allocate_extent_clause

allocate_extent_clauseを使用すると、表、パーティション、サブパーティション、オーバーフロー・データ・セグメント、LOBデータ・セグメントまたはLOB索引に新しいエクステントを明示的に割り当てることができます。

表エクステントの割当ての制限事項

一時表、レンジ・パーティション表またはコンポジット・パーティション表にエクステントを割り当てることはできません。

関連項目:

この句の詳細は、「allocate_extent_clause」および「エクステントの割当て: 例」を参照してください。

deallocate_unused_clause

deallocate_unused_clause deallocate_unused_clauseを使用すると、表、パーティション、サブパーティション、オーバーフロー・データ・セグメント、LOBデータ・セグメントまたはLOB索引の最後にある未使用領域の割当てを明示的に解除できます。解放された領域は、表領域の他のセグメントから利用できます。

関連項目:

この句の詳細は、「deallocate_unused_clause」および「未使用領域の割当て解除: 例」を参照してください。

CACHE | NOCACHE

CACHE句およびNOCACHE句のセマンティクスは、CREATE TABLE文およびALTER TABLE文で同じです。これらの句の詳細は、「CREATE TABLE」の「CACHE | NOCACHE | CACHE READS」を参照してください。ALTER TABLE文でこれらの句をいずれも省略した場合、既存の値は変更されません。

RESULT_CACHE

RESULT_CACHE句は、CREATE TABLE文およびALTER TABLE文と同じセマンティクスを持ちます。この句の詳細は、「CREATE TABLE」の「RESULT_CACHE句」を参照してください。ALTER TABLE文でこの句を指定しない場合、既存の設定は変更されません。

upgrade_table_clause

upgrade_table_clauseが意味を持つのは、オブジェクト表や、オブジェクト列を持つリレーショナル表に対して使用する場合です。ターゲットとなる表のメタデータが、参照される型それぞれの最新バージョンに準拠するように変換されます。表がすでに有効なものである場合は、表のメタデータは変更されません。

オブジェクト表および列のアップグレードの制限事項

この句内で、column_propertiesの句としてobject_type_col_propertiesを指定することはできません。

INCLUDING DATA

INCLUDING DATAを指定すると、表のデータを型の最新バージョンの形式に変換できます。column_propertiesおよびLOB_partition_storageを使用して表をアップグレードする間に、新しいすべての列の記憶域を定義できます。これはデフォルトです。

ALTER TYPE文のdependent_handling_clauseCASCADE INCLUDING TABLE DATAを指定すると、型の更新時に表のデータを変換できます。この句の詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。表が古いバージョンの型に基づくデータを含むかどうかを確認するには、USER_TAB_COLUMNSデータ・ディクショナリ・ビューのDATA_UPGRADED列を参照します。

NOT INCLUDING DATA

NOT INCLUDING DATAを指定すると、列データは変更されません。

NOT INCLUDING DATAの制限事項

表にOracle8リリース8.0.xのイメージ・フォーマットの列が含まれる場合、NOT INCLUDING DATAは指定できません。表がこのような列を含むかどうかを確認するには、USER_TAB_COLUMNSデータ・ディクショナリ・ビューのV80_FMT_IMAGE列を参照します。

関連項目:

  • データ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

  • 表が依存する型を変更する際に、依存表のデータを変換する場合の詳細は、「ALTER TYPE」を参照してください。

records_per_block_clause

records_per_block_clauseを使用すると、1ブロックに格納できるレコード数を制限するかどうかを指定できます。この句によって、この後、表に作成されるビットマップ索引はできるだけ縮小されます。

ブロックのレコードの制限事項

record_per_block_clauseには、次の制限事項があります。

  • 表にすでにビットマップ索引が定義されている場合は、MINIMIZEまたはNOMINIMIZEのいずれも指定できません。まず、ビットマップ索引を削除する必要があります。

  • この句は、索引構成表またはネストした表に対して指定できません。

MINIMIZE

MINIMIZEを指定すると、表の各ブロックの最大レコード数を計算し、ブロックに含まれるレコード数がその数を超えないように挿入操作を制限できます。

MINIMIZEを指定する前に、表にデータのサンプル・セットを定義しておくことをお薦めします。表の圧縮を使用している場合(「table_compression」を参照)、圧縮データのサンプル・セットは、すでに表に存在している必要があります。

MINIMIZEの制限事項

空の表にMINIMIZEを指定することはできません。

NOMINIMIZE

NOMINIMIZEを指定すると、MINIMIZE機能が無効になります。これはデフォルトです。

row_movement_clause

親表でも行の移動が無効化されている場合を除き、参照パーティション表で行の移動を無効にすることはできません。それ以外では、この句のセマンティクスは、CREATE TABLE文およびALTER TABLE文で同じです。これらの句の詳細は、「CREATE TABLE」の「row_movement_clause」を参照してください。

flashback_archive_clause

この句を指定するには、指定されたフラッシュバック・データ・アーカイブに対するFLASHBACK ARCHIVEオブジェクト権限が必要です。この句を使用すると、表の履歴追跡を有効または無効にできます。

  • 表の追跡を有効にするには、FLASHBACK ARCHIVEを指定します。flashback_archiveを指定すると、この表に特定のフラッシュバック・データ・アーカイブを指定できます。指定するフラッシュバック・データ・アーカイブは、すでに存在している必要があります。

    アーカイブ名を指定しない場合、データベースは、システムに指定されたデフォルトのフラッシュバック・データ・アーカイブを使用します。システムにデフォルトのフラッシュバック・データ・アーカイブが指定されていない場合は、flashback_archiveを指定する必要があります。

    FLASHBACK ARCHIVEを指定して、この表のフラッシュバック・データ・アーカイブを変更することはできません。かわりに、まずALTER TABLE文にNO FLASHBACK ARCHIVE句を付けて実行し、次に、ALTER TABLE文にFLASHBACK ARCHIVE句を付けて実行します。

  • 表の追跡を無効にするには、NO FLASHBACK ARCHIVEを指定します。

関連項目:

追跡が有効な表の作成の詳細は、「CREATE TABLE」の「flashback_archive_clause」を参照してください。デフォルトのフラッシュバック・データ・アーカイブの作成の詳細は、「CREATE FLASHBACK ARCHIVE」を参照してください。

RENAME TO

RENAME句を使用すると、tableの名前をnew_table_nameに変更できます。

この句を使用した場合、依存するすべてのマテリアライズド・ビューは無効になります。マテリアライズド・ビューの詳細は、「CREATE MATERIALIZED VIEW」および『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

表にドメイン索引が定義されている場合、ODCIIndexAlter()メソッドがRENAMEオプション付きで起動されます。この操作によって、索引タイプ・メタデータと実表の間の対応が確立されます。

表名の変更の制限事項

シャード表または重複表の名前は変更できません。

shrink_clause

shrink_clauseを使用すると、表、索引構成表またはそのオーバーフロー・セグメント、索引、パーティション、サブパーティション、LOBセグメント、マテリアライズド・ビューまたはマテリアライズド・ビュー・ログの領域を手動で縮小できます。この句は、自動セグメント管理を使用した表領域のセグメントに対してのみ有効です。デフォルトでは、セグメントが縮小されて最高水位標が調整され、再生領域がすぐに解放されます。

セグメントの縮小では、行移動が必要です。したがって、この句を指定する前に、縮小するオブジェクトの行移動を使用可能にする必要があります。また、アプリケーションでROWIDに基づいたトリガーを使用している場合、この句を発行する前にこのトリガーを使用禁止にする必要があります。

注意:

shrink_clauseを指定する前に、索引構成表に対して行の移動を有効にしないでください。索引構成表のROWIDは、その主キーであり、変更できません。このため、そのような表に対して行の移動は関係なく、有効でもありません。

COMPACT

COMPACTを指定すると、セグメント領域のデフラグのみが行われ、後で領域を解放できるように表の行が縮小されます。最高水位標の再調整および領域の解放は、すぐに行われません。操作を完了するには、後で別のALTER TABLE ... SHRINK SPACE文を発行する必要があります。この句は、1回の長いステップのかわりに2回の短いステップで縮小操作を実行する場合に便利です。

索引や索引構成表の場合は、ALTER [INDEX | TABLE] ... SHRINK SPACE COMPACTを指定することはALTER [INDEX | TABLE ... COALESCEを指定することと同じです。shrink_clauseはカスケード実行できます(次のCASCADE句を参照)。また結合操作の場合よりもセグメントを高密度に圧縮できるため、パフォーマンスが向上します。ただし、未使用領域を解放しない場合は、適切なCOALESCE句を使用します。

CASCADE

CASCADEを指定すると、tableのすべての依存オブジェクト(索引構成表の2次索引を含む)に対して同じ操作を実行できます。

shrink_clauseの制限事項

shrink_clauseには、次の制限事項があります。

  • 同じALTER TABLE文で、この句と別の句を組み合せて使用することはできません。

    この句は、クラスタ、クラスタ化表またはLONG列を含むすべてのオブジェクトには指定できません。

  • セグメントの縮小は、ファンクション索引、ドメイン索引またはビットマップ結合索引を含む表ではサポートされません。

  • CASCADEを指定しても、この句では索引構成表のマッピング表を縮小できません。

  • この句は、高度な行圧縮が有効な(ROW STORE COMPRESS ADVANCED)表に対して指定できます。その他の種類の表圧縮が有効な表に対しては、この句を指定できません。

  • ON COMMITマテリアライズド・ビューのマスター表は縮小できません。ROWIDマテリアライズド・ビューは、縮小操作の実行後に再構築する必要があります。

READ ONLY | READ WRITE

READ ONLYを指定すると、表を読取り専用モードに設定できます。表がREAD ONLYモードの場合は、表に影響するDML文またはSELECT ... FOR UPDATE文は発行できません。表データを変更しないDDL文は発行できます。表がREAD ONLYモードの場合は、表に関連する索引の操作は可能です。読取り専用表で許可される操作および許可されない操作の完全なリストは、『Oracle Database管理者ガイド』を参照してください。

READ WRITEを指定すると、読取り専用表を読取り/書込みモードに戻すことができます。

REKEY encryption_spec

REKEY句を使用すると、新しい暗号化キーの生成または異なるアルゴリズム間の切替えができます。この操作は、表内のLOB列を含むすべての暗号化された列が再度暗号化された後にのみ戻されます。

DEFAULT COLLATION

この句を使用すると、表のデフォルト照合を変更できます。collation_nameには、有効な名前付き照合または疑似照合を指定します。

表の新しいデフォルト照合は、ALTER TABLE ADD文を使用して後から表に追加されたか、またはALTER TABLE MODIFY文を使用して非文字データ型から変更された文字データ型の列に割り当てられます。表の既存列の照合は変更されません。この句のセマンティクスの詳細は、「CREATE TABLE」の「DEFAULT COLLATION」句を参照してください。

[NO] ROW ARCHIVAL

この句を指定すると、tableの行アーカイブを有効化または無効化できます。

  • tableの行アーカイブを有効にするには、ROW ARCHIVALを指定します。非表示列ORA_ARCHIVE_STATEが表に作成されます。テーブルにデータがすでに移入されている場合、表内の既存の各行でORA_ARCHIVE_STATEの値が0に設定されます。その後、UPDATE文を使用して、アーカイブする行のORA_ARCHIVE_STATEの値を1に設定できます。

  • tableの行アーカイブを無効にするには、NO ROW ARCHIVALを指定します。非表示列ORA_ARCHIVE_STATEが表から削除されます。

[NO] ROW ARCHIVALの制限事項

この句には、次の制限事項が適用されます。

  • ROW ARCHIVAL句は、ORA_ARCHIVE_STATEという名前の列がすでに含まれている表に対しては指定できません。

  • NO ROW ARCHIVAL句は、SYSが所有する表に対しては指定できません。

関連項目:

  • この句のセマンティクスの詳細は、「CREATE TABLE」の「ROW ARCHIVAL」句を参照してください。

  • インデータベース・アーカイブの詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

attribute_clustering_clause

ADD attribute_clustering_clauseを使用して、属性クラスタリングの表を有効化します。attribute_clustering_clauseは、ALTER TABLEおよびCREATE TABLEと同じセマンティクスを持ちます。CREATE TABLEのドキュメントのattribute_clustering_clauseを参照してください。

MODIFY CLUSTERING

この句を使用して、ダイレクト・パス・インサート操作またはデータ移動操作中の表の属性クラスタリングを許可または禁止します。表の属性クラスタリングを有効化する必要があります。clustering_when句およびzonemap_clauseは、ALTER TABLEおよびCREATE TABLEと同じセマンティクスを持ちます。CREATE TABLEのドキュメントのclustering_when句およびzonemap_clauseを参照してください。

DROP CLUSTERING

この句を使用して、属性クラスタリングの表を無効化します。

CREATE TABLEまたはALTER TABLEWITH MATERIALIZED ZONEMAP句を使用して表のゾーン・マップが作成された場合、ゾーン・マップが削除されます。CREATE MATERIALIZED ZONEMAP文を使用して表のゾーン・マップが作成された場合、ゾーン・マップが削除されません。

alter_iot_clauses

index_org_table_clause

この句を使用すると、既存の索引構成表の特性の一部を変更できます。索引構成表は主キーでデータをソートするため、主キーベースのアクセスおよび操作に最適です。「CREATE TABLE」のコンテキストで、「index_org_table_clause」を参照してください。

prefix_compression

prefix_compression句を使用して、表の接頭辞圧縮を有効化します。COMPRESSを指定すると、ブロックを再利用するために、索引構成表の主キー索引ブロックを空きブロックに結合できます(可能な場合)。この句はparallel_clauseとあわせて指定できます。NOCOMPRESSを指定して、表の接頭辞圧縮を無効化します。

PCTTHRESHOLD integer

CREATE TABLE」の「PCTTHRESHOLD integer」を参照してください。

INCLUDING column_name

CREATE TABLE」の「INCLUDING column_name」を参照してください。

overflow_attributes

overflow_attributesを使用すると、索引構成表に対して、変更するオーバーフロー・データ・セグメントの物理記憶域属性およびロギング属性を指定できます。この句に指定するパラメータの値は、オーバーフロー・データ・セグメントにのみ適用されます。

関連項目:

CREATE TABLE

add_overflow_clause

add_overflow_clauseを使用すると、指定した索引構成表にオーバーフロー・データ・セグメントを追加できます。また、この句を使用すると、エクステントを明示的に割り当てたり、既存のオーバーフロー・セグメントから未使用領域の割当てを解除することができます。

STORE IN tablespace句を使用すると、オーバーフロー・セグメント全体に対する表領域の記憶域を指定できます。PARTITION句を使用すると、パーティションによるセグメントに対する表領域の記憶域を指定できます。

パーティション化された索引構成表の場合、次の点に注意してください。

  • PARTITIONを指定しない場合、それぞれのパーティションに自動的にオーバーフロー・セグメントが割り当てられます。これらのセグメントの物理属性は表のレベルから継承されます。

  • 1つ以上のパーティションに別々の物理属性を指定する場合は、その属性を表のすべてのパーティションに対して指定する必要があります。パーティションの名前を指定する必要はありませんが、パーティションが作成された順番で属性を指定する必要があります。

パーティションの順番を確認するには、USER_IND_PARTITIONSビューのPARTITION_NAMEおよびPARTITION_POSITION列を問い合せます。

TABLESPACEを指定していないパーティションがある場合、表に対して指定された表領域が使用されます。表レベルでTABLESPACEを指定していない場合は、そのパーティションの主キー索引セグメントの表領域が使用されます。

オーバーフロー属性の制限事項

segment_attributes_clause内では、次の制限事項があります。

  • physical_attributes_clauseOPTIMALパラメータを指定できません。

  • この句を使用して、オーバーフロー・セグメントの表領域の記憶域を指定できません。非パーティション表の場合、ALTER TABLE ... MOVE ... OVERFLOWを使用して、セグメントを異なる表領域に移動します。パーティション表の場合、ALTER TABLE ... MODIFY DEFAULT ATTRIBUTES ... OVERFLOWを使用して、オーバーフロー・セグメントのデフォルト表領域を変更します。

tableがローカル管理表領域にある場合、表領域のセグメント属性の中にはデータベースによって自動的に管理されるものがあるため、制限事項が追加されます。

関連項目:

add_overflow_clause句の詳細は、「allocate_extent_clause」および「deallocate_unused_clause」を参照してください。

alter_overflow_clause

alter_overflow_clauseを使用すると、既存の索引構成表のオーバーフロー・セグメントの定義を変更できます。

add_overflow_clauseの制限事項は、alter_overflow_clauseにも適用されます。

注意:

索引構成表に列を追加した場合、各列の最大サイズが評価され、行の最大値が計算されます。オーバーフロー・セグメントが必要で、OVERFLOWを指定していない場合は、エラーが発生しALTER TABLE文は実行されません。このチェック機能によって、索引構成表に対する後続のDML操作が、オーバーフロー・セグメントがないために失敗することを回避できます。

alter_mapping_table_clauses

alter_mapping_table_clausesは、tableが索引構成されており、マッピング表を持つ場合にのみ有効です。

allocate_extent_clause

allocate_extent_clauseを使用すると、新しいエクステントを索引構成表のマッピング表の終わりに割り当てることができます。この句の詳細は、allocate_extent_clause」を参照してください。

deallocate_unused_clause

deallocate_unused_clauseを指定すると、索引構成表のマッピング表の終わりにある未使用領域の割当てを解除できます。この句の詳細は、deallocate_unused_clause」を参照してください。

マッピング表またはそのパーティションに関する他のすべての属性は、自動的に管理されます。

COALESCE句

COALESCEを指定すると、ブロックを再利用するために、索引構成表の管理に使用される索引の索引ブロックの内容を空きブロックにマージできます(可能な場合)。この句とshrink_clauseの関係については、shrink_clause」を参照してください。

alter_XMLSchema_clause

この句は、BINARY XML記憶域のXMLType表を変更する場合にのみ、alter_table_propertiesの一部として有効です。ALLOWおよびDISALLOW句の詳細は、「CREATE TABLE」のXMLSchema_spec」を参照してください。

column_clauses

これらの句を指定すると、列を追加、削除または変更できます。

add_column_clause

add_column_clauseを使用すると、表に列を追加できます。

関連項目:

この句のキーワードとパラメータの詳細は、「CREATE TABLE」および「表の列の追加: 例」を参照してください。

column_definition

既存の表に列を追加するときのcolumn_definitionの要素の動作は、この項で特に述べられていないかぎり、新しい表の作成時に列を追加するときの動作と同じです。詳細は、「CREATE TABLE」の「column_definition」句を参照してください。

column_definitionの制限事項

SORTパラメータは、新しい表の作成時にのみ有効です。ALTER TABLE ... ADD文のcolumn_definitionでは、SORTを指定できません。

列を追加するときに、DEFAULT句を指定していないと、新しい列の各行の初期値はNULLになります。

パーティション化された索引構成表の各パーティションには、オーバーフロー・データ・セグメントを追加できます。

非パーティションおよびパーティション表にLOB列を追加できます。表、およびパーティションまたはサブパーティションのレベルでLOB記憶域を指定できます。

SELECT *構文を使用して、表からすべての列を選択するように指定した問合せを使用してビューを作成した場合、tableに列を追加しても、新しい列がビューに自動的に追加されることはありません。ビューに新しい列を追加する場合、CREATE VIEW文にOR REPLACE句を指定してビューを再作成してください。詳細は、「CREATE VIEW」を参照してください。

列の追加の制限事項

列の追加には、次の制限事項があります。

  • LOB列またはINVISIBLEの列は、クラスタ表には追加できません。

  • LOB列をハッシュ・パーティション表に追加する場合、新しいパーティションに対して指定できる属性は、TABLESPACEのみです。

  • tableに行がある場合、DEFAULT句を指定しないかぎり、NOT NULL制約のある列を追加できません。

  • 索引構成表にこの句を指定した場合、同じ文では他の句を指定できません。

  • 重複表には列を追加できません。

DEFAULT

DEFAULT句を使用すると、新しい列にデフォルト値を指定したり、既存の列に新しいデフォルト値を指定することができます。後続のINSERT文で列に値を指定しない場合、この値が自動的に割り当てられます。

この式のデータ型は、列に指定したデータ型と一致している必要があります。列には、この式を保持できる大きさが必要です。

DEFAULT式には、リテラル引数、列の参照またはネストしたファンクションの起動を戻さない、任意のSQLファンクションを含めることができます。

このDEFAULT式には、順序疑似列のCURRVALNEXTVALを含めることができます。ただし、順序が存在していて、その順序にアクセスするために必要な権限を所持している必要があります。それ以降に、DEFAULT式を使用して挿入を実行するユーザーには、表に対するINSERT権限と、順序に対するSELECT権限が必要になります。その後で順序が削除されると、それ以降のDEFAULT式を使用する挿入文でエラーが発生します。新しい列を表に追加すると、既存の各行に割り当てられるNEXTVALの順序は、非決定的になります。順序の所有者を指定して完全修飾(例: SCOTT.SEQ1)していない場合、Oracle Databaseは、ALTER TABLE文を発行したユーザーを順序のデフォルトの所有者にします。たとえば、ユーザーMARYSCOTT.TABLEに列を追加して、SEQ2のように完全修飾していない順序を参照すると、その列は順序MARY.SEQ2を使用するようになります。順序に対するシノニムは完全に名前解決され、完全修飾された順序としてデータ・ディクショナリに格納されます。これは、パブリック・シノニムとプライベート・シノニムに当てはまります。たとえば、ユーザーBETHが、パブリック・シノニムまたはプライベート・シノニムのSYN1を参照する列を追加したときに、そのシノニムがPETER.SEQ7を参照していると、その列はデフォルトとしてPETER.SEQ7を格納するようになります。

列にDEFAULT句を指定すると、デフォルト値はメタデータとして格納されますが、列自体にはデータは移入されません。ただし、デフォルト値が結果セットに戻されるように、新しい列を指定する後続の問合せは再書込みされます。この最適化された動作には、次の制限事項があります。

  • 表にLOB列を持つことはできません。対象となる表は、索引構成化したり、一時表またはクラスタ化された表にすることはできません。また、キュー表、オブジェクト表またはマテリアライズド・ビューのコンテナ表にすることもできません。

  • 表が仮想プライベート・データベース(VPD)ポリシーを持つ場合、ALTER TABLE ... ADD文を発行するユーザーにEXEMPT ACCESS POLICYシステム権限がないかぎり、最適化された動作は有効ではありません。

  • 追加する列は暗号化できず、オブジェクト列、ネストした表の列またはLOB列にすることはできません。

  • このDEFAULT式には、順序疑似列のCURRVALまたはNEXTVALを含めることができません。

前述の制限事項のために最適な動作が実行できない場合、Oracle Databaseは、新しく作成した列の各行をデフォルト値で更新します。この場合、データベースは表に定義されたUPDATEトリガーを起動しません。

デフォルト列値の制限事項

デフォルト列値には、次の制限事項があります。

  • DEFAULT式に、PL/SQLファンクション、他の列、疑似列LEVELPRIORおよびROWNUMへの参照または完全に指定されていない日付定数は指定できません。

  • 式には、スカラー副問合せ式を除くすべての書式を使用できます。

ON NULL

ON NULL句を指定すると、Oracle Databaseは、それ以降のINSERT文でNULLに評価される値を割り当てようとするときに、DEFAULTの列値を割り当てるようになります。

ON NULLを指定すると、NOT NULL制約と、NOT DEFERRABLE制約状態が暗黙的に指定されます。NOT NULLおよびNOT DEFERRABLEと競合する表内制約を指定すると、エラーが発生します。

identity_clause

identity_clauseはID列を追加する場合、ID列を作成する場合と同じセマンティクスを持ちます。詳細は、CREATE TABLE「identity_clause」を参照してください。

新しいID列を追加すると、既存のすべての行は順序ジェネレータを使用して更新されます。既存の各行に割り当てられる値の順序は、非決定的になります。

identity_options

identity_options句を使用すると、順序ジェネレータを構成できます。identity_options句のパラメータは、CREATE SEQUENCE文と同じです。これらのパラメータと特性の詳細は、「CREATE SEQUENCE」を参照してください。identity_optionsに固有のSTART WITH LIMIT VALUEは例外であり、ALTER TABLE MODIFYでのみ使用できます。詳細は、「identity_options」を参照してください。

inline_constraint

inline_constraintを使用すると、新しい列に制約を追加できます。

inline_ref_constraint

この句を使用すると、新しいREF型の列を定義できます。制約の型の構文や制限などの詳細は、constraint」を参照してください。

virtual_column_definition

virtual_column_definitionは列を追加する場合、列を作成する場合と同じセマンティクスを持ちます。

関連項目:

詳細は、「CREATE TABLE」の「virtual_column_definition」および「仮想表の列の追加: 例」を参照してください。

仮想列の追加の制限事項

仮想列のSQL式にOracle Data Redactionポリシーが定義されている列が関与するときには、仮想列は追加できません。

column_properties

column_propertiesの句を使用すると、オブジェクト型、ネストした表、VARRAYまたはLOB列の記憶特性を指定できます。

object_type_col_properties

この句は、新しいオブジェクト型の列または属性の追加時にのみ有効です。modify_column_clausesを使用すると、既存のオブジェクト型列のプロパティを変更できます。この句のセマンティクスは、特に指定がないかぎり、CREATE TABLEと同じです。

object_type_col_properties句を使用すると、新しいオブジェクト列、オブジェクト属性、コレクション列およびコレクション属性の要素に対する記憶特性を指定できます。

この句の詳細は、「CREATE TABLE」のobject_type_col_properties」を参照してください。

nested_table_col_properties

nested_table_col_properties句を使用すると、ネストした表に対して別の記憶特性を指定し、そのネストした表を索引構成表として定義できます。ネストした表の型を持つ列または列属性付きで表を作成する場合は、この句を挿入する必要があります。(この句の中で、親オブジェクト表に対する場合と同じ働きをする句は、ここでは繰り返されません。これらの句の詳細は、「CREATE TABLE」の句「nested_table_col_properties」を参照してください。

  • nested_itemには、型がネストした表である列(または、ネストした表のオブジェクト型の最上位の属性)の名前を指定します。

    ネストした表がマルチレベル・コレクションで、内部のネストした表には名前が割り当てられていない場合、nested_item名のかわりにCOLUMN_VALUEを指定します。

  • storage_tableには、nested_itemの行を含む表の名前を指定します。記憶表は、親表と同じスキーマ、および親表と同じ表領域内に作成されます。

ネストした表の列のプロパティの制限事項

ネストした表の列のプロパティには、次の制限事項があります。

  • parallel_clauseは指定できません。

  • physical_properties句の一部としてCLUSTERを指定できません。

関連項目:

ネストした表: 例

varray_col_properties

varray_col_properties句を使用すると、VARRAY型のデータが格納されているLOBに対して、別の記憶特性を指定できます。この句を指定する場合、表内に格納できるほど小さい値でも、VARRAYは必ずLOBに格納されます。varray_itemがマルチレベル・コレクションの場合、varray_item内にネストされたすべてのコレクション項目は、常にvarray_itemと同じLOBに格納されます。

VARRAY列のプロパティの制限事項

VARRAY列のLOB_parametersの一部としてTABLESPACEを指定することはできません。VARRAYに対するLOB表領域のデフォルトは、表を含む表領域になります。

out_of_line_part_storage

この句を使用すると、新しく追加した列に対し、パーティション表内のパーティションまたはサブパーティションごとに記憶域属性を指定できます。この句で指定しないパーティションまたはサブパーティションについては、新しい列の記憶域属性は、表レベルのnested_table_col_propertiesで指定したものと同じになります。

LOB_storage_clause

LOB_storage_clauseを使用すると、新しく追加したLOB列、LOBパーティション、LOBサブパーティションまたはLONG列からLOB列への変換時のLOB記憶特性を指定できます。この句では、既存のLOBを変更できません。かわりに、modify_LOB_storage_clauseを使用する必要があります。

この項で特に指定がない場合は、LOB_storage_clauseおよびmodify_LOB_storage_clause内のすべてのLOBパラメータは、ALTER TABLE文で、CREATE TABLE文と同じセマンティクスを持ちます。この句の詳細は、「CREATE TABLE」の「LOB_storage_clause」を参照してください。

LOBパラメータの制限事項

ハッシュ・パーティションまたはハッシュ・サブパーティションに指定できるLOB_parametersのパラメータは、TABLESPACEのみです。

CACHE READS句

新しいLOB列の追加時には、作成時にLOB列を定義する場合と同様に、CACHE READSでロギング属性を指定できます。この句の詳細は、CREATE TABLEの句「CACHE READS」を参照してください。

ENABLE|DISABLE STORAGE IN ROW

STORAGE IN ROWは、一度設定すると変更できません。したがって、この句はmodify_col_properties句の一部には指定できません。ただし、新しい列を追加するとき(add_column_clause)、または表を移動するとき(move_table_clause)に、この設定を変更できます。この句の詳細は、「CREATE TABLE」の句「ENABLE STORAGE IN ROW」を参照してください。

CHUNK integer

modify_col_properties句を使用して、CHUNKの値を設定後に変更することはできません。作成後の列に異なるCHUNK値が必要な場合は、ALTER TABLEMOVEを使用します。詳細は、「CREATE TABLE」の句「CHUNK integer」を参照してください。

RETENTION

データベースが自動UNDOモードで稼働している場合、BasicFiles LOBに対してPCTVERSIONではなくRETENTIONを指定することで、このLOBの古いバージョンを保持できます。この句によって、PCTVERSIONのこれまでの設定が上書きされます。このパラメータの詳細は、「CREATE TABLE」の句「LOB_retention_clause」を参照してください。

FREEPOOLS integer

データベースが自動UNDOモードで稼働している場合、BasicFiles LOBに対してこの句を使用するとLOBの空きリスト・グループ数を指定できます。この句によって、FREELIST GROUPSのこれまでの設定が上書きされます。このパラメータの詳細は、「CREATE TABLE」の句「FREEPOOLS integer」を参照してください。SecureFiles LOBの場合は、データベースはこのパラメータを無視します。

LOB_partition_storage

1つのALTER TABLE文で指定できるLOB_partition_storage句のリストは1つのみであり、すべてのLOB_storage_clausesおよびvarray_col_properties句はLOB_partition_storage句のリストの前に指定する必要があります。制限事項を含むこの句の詳細は、「CREATE TABLE」の句「LOB_partition_storage」を参照してください。

XMLType_column_properties

この句の詳細は、「CREATE TABLE」の句「XMLType_column_properties」を参照してください。

関連項目:

modify_column_clauses

modify_column_clausesを使用すると、既存の列のプロパティ、既存の列の可視性、または既存のオブジェクト型列の代替性を変更できます。

関連項目:

表の列の変更: 例

modify_col_properties

この句を使用すると、列のプロパティを変更できます。この句で省略した列定義のオプション部分(データ型、デフォルト値、制約)は、変更されません。

datatype

列のすべての行がNULLの場合、列のデータ型を変更できます。ただし、マテリアライズド・ビューのコンテナ表にある列のデータ型を変更した場合、それに対応するマテリアライズド・ビューが無効になります。

参照整合性制約の外部キーの一部として、文で列が指定されている場合のみ、データ型を省略できます。参照整合性制約の参照キーに対応する列のデータ型が、その列に自動的に割り当てられます。

すべての行にNULL値が存在するどうかにかかわらず、文字型またはRAW型の列のサイズ、または数値型の列の精度は、いつでも大きくすることができます。変更対象のデータに変更の必要がない場合は、列のデータ型のサイズを削減できます。データベースは、既存のデータをスキャンして、新しい長さ制限を超過するデータが存在する場合はエラーを返します。

VARCHAR2NVARCHAR2、またはRAWの列のサイズが4,000バイトを超えるように拡大すると、Oracle Databaseはインプレースで長さの拡張を実行し、表内記憶域を外部LOB記憶域に移行しなくなります。これにより、大きい表の連続移行が可能になり、特に移行後に拡張データ型を活用できます。ただし、列の表内記憶域は、CREATE TABLE ... AS SELECT、エクスポート、インポート、オンライン再定義などの表の再編成操作時には保存されません。拡張データ型列の新しい表外記憶域に移行する場合は、前述の方法のいずれかを使用して表を再作成する必要があります。列の表内記憶域は、表またはパーティションの移動操作時(ALTER TABLE MOVE [[SUB]PARTITION]など)およびパーティションのメンテナンス操作時(ALTER TABLE SPLIT [SUB]PARTITIONALTER TABLE MERGE [SUB]PARTITIONSALTER TABLE COALESCE [SUB]PARTITIONSなど)に保存されます。

注意:

VARCHAR2NVARCHAR2、またはRAWの列のサイズは、次の理由から、4,000バイトを超える過度の拡大は避けるようにしてください。

  • 行の変更が発生する場合があります。

  • 表内に格納されているデータは、列が選択されているかどうかにかかわらず、全体を読み込むことが必要になります。そのため、表内に格納される拡張データ型の列は、パフォーマンスに悪影響を与えることがあります。

変更対象のデータに変更の必要がない場合は、列のデータ型のサイズを削減できます。データベースは、既存のデータをスキャンして、新しい長さ制限を超過するデータが存在する場合はエラーを返します。

DATE列をTIMESTAMPまたはTIMESTAMP WITH LOCAL TIME ZONE列に、TIMESTAMPまたはTIMESTAMP WITH LOCAL TIME ZONE列をDATE列に変更できます。以下のルールが適用されます。

  • TIMESTAMPまたはTIMESTAMP WITH LOCAL TIME ZONE列をDATE列に変更する場合、秒に0以外の小数部が含まれる各列の値が最も近い秒に丸めて更新されます。そのような値の更新時に60以上の分フィールドがある場合(夏時間の規則が切り換えられた場合に境界で発生)、分フィールドから60を引いてフィールドが更新されます。

  • TIMESTAMP WITH LOCAL TIME ZONE列をDATE列に変更しても、列の値はデータベースのタイムゾーンで示したローカル時間を示します。ただし、データベースのタイムゾーンは値とは関連付けされなくなります。SQL*Plusで問い合せた場合、値がセッションのタイムゾーンに自動で調整されることはなくなります。列の値を処理するアプリケーションが特定のタイムゾーンで値を解析することになります。

表が空の場合、日時列または期間列の先行フィールドまたは秒の小数部を増やすことも減らすこともできます。表が空でない場合、日時列または期間列の先行フィールドまたは秒の小数部を増やすことのみできます。

TO_LOBファンクションを使用すると、LONG列をCLOB列またはNCLOB列に、LONG RAW列をBLOB列に変更できます。ただし、PL/SQLパッケージ内からはTO_LOBファンクションを使用できません。かわりに、TO_CLOB (文字)ファンクションまたはTO_BLOB (RAW)ファンクションを使用してください。

  • 変更されたLOB列は、元のLONG列で定義されたすべての制約およびトリガーを継承します。いずれかの制約を変更する場合、後続のALTER TABLE文で変更する必要があります。

  • ドメイン索引がLONG列で定義されている場合、列をLOBに変更する前に削除する必要があります。

  • 変更後、表のすべての列にある他のすべての索引を再構築する必要があります。

TO_CLOB (文字)ファンクションを使用すると、NCLOB列をCLOB列に変換できます。

関連項目:

CHARおよびVARCHAR2列の場合、CHAR(元々バイトで指定されていた列に対するキャラクタ・セマンティクス)またはBYTE(元々文字で指定されていた列に対するバイト・セマンティクス)を指定すると、長さセマンティクスを変更できます。既存の列の長さセマンティクスを確認するには、ALL_TAB_COLUMNSUSER_TAB_COLUMNSまたはDBA_TAB_COLUMNSデータ・ディクショナリ・ビューのCHAR_USED列を問い合せます。

関連項目:

データ型の作成時または変更時に、ユーザー定義のデータ型を永続不可として指定できます。永続不可型のインスタンスは、ディスク上で保持することはできません。永続不可型として宣言されるユーザー定義のデータ型の詳細は、「CREATE TYPE」を参照してください。

COLLATE

この句を使用すると、列のデータ・バインドされた照合を設定または変更できます。column_collation_nameには、有効な名前付き照合または疑似照合を指定します。データ・バインドされた照合の詳細は、「CREATE TABLE」の「DEFAULT COLLATION」句を参照してください。

列照合の変更の制限事項

列照合の変更には、次の制限事項があります。

  • 列が索引キーに属する場合、その照合は次の場合にのみ変更できます。

    • 照合BINARYUSING_NLS_COMPUSING_NLS_SORTおよびUSING_NLS_SORT_CSの間

    • 照合BINARY_CIおよびUSING_NLS_SORT_CIの間

    • 照合BINARY_AIおよびUSING_NLS_SORT_AIの間

  • 列が、レンジ・パーティション・キーまたはリスト・パーティション・キーに属しているか、ビットマップ結合索引により参照されているか、索引構成表の主キーに属しているか、Oracle Text索引を含むドメイン索引のキーに属している場合、その照合はBINARYUSING_NLS_COMPUSING_NLS_SORTおよびUSING_NLS_SORT_CSの各照合間でのみ変更できます。

  • 列が属性クラスタリング・キーに属している場合、その照合はBINARYおよびUSING_NLS_COMP照合間でのみ変更できます。

identity_clause

identity_clauseを使用すると、ID列のプロパティを変更できます。この句は、ID列ではない列に対しては指定できません。ALWAYSまたはBY DEFAULTを省略すると、現在の生成タイプが保持されます。ALWAYSおよびBY DEFAULTの詳細は、CREATE TABLE「identity_clause」を参照してください。

identity_options

identity_options句を使用すると、順序ジェネレータを構成できます。identity_options句のパラメータは、CREATE SEQUENCE文と同じです。これらのパラメータと特性の詳細は、「CREATE SEQUENCE」を参照してください。例外は次のとおりです。

  • identity_optionsに固有のSTART WITH LIMIT VALUEは、ALTER TABLE MODIFYでのみ使用できます。START WITH LIMIT VALUEを指定すると、Oracle Databaseは表をロックして、表内で最大のID列の値(増加する順序の場合)、または最小のID列の値(減少する順序の場合)を検出して、その値を順序ジェネレータの最高水位標として割り当てます。順序ジェネレータが返す次の値は、増加する順序の場合は最高水位標 + INCREMENT BY integerになり、減少する順序の場合は最高水位標 - INCREMENT BY integerになります。

  • START WITHの値を変更すると、この句内のその他すべてのパラメータにデフォルトの値が使用されるようになります。ただし、別の値が指定されている場合を除きます。

DROP IDENTITY

この句を使用すると、列からIDプロパティを削除できます。このプロパティには、シーケンス・ジェネレータや、NOT NULL制約、NOT DEFERRABLE制約などが含まれます。既存の行のID列の値には影響しません。

ENCRYPT encryption_spec | DECRYPT

この句は、暗号化された列の復号化や暗号化されていない列の暗号化を行うとき、および暗号化された列の整合性アルゴリズムやSALTオプションを変更するときに使用します。

encryption_specを指定して既存の列を暗号化する場合は、同じ表内で暗号化されている他の列の暗号化仕様と一致させることが必要です。encryption_specの詳細や制限事項は、「CREATE TABLE」の句「encryption_spec」を参照してください。

マテリアライズド・ビュー・ログが表に対して定義されている場合は、この句内で暗号化または復号化される列が、マテリアライズド・ビュー・ログ内でも暗号化または復号化されます。

ENCRYPT encryption_spec | DECRYPTの制限事項

この句には、次の制限事項があります。

  • 新規または既存の列がLOB列の場合は、列をSecureFiles LOBとして格納する必要があり、SALTオプションは指定できません。

  • 暗号化または復号化する列に対して、UPDATE文のファイングレイン監査ポリシーが有効化されていてはなりません。ただし、ファイングレイン監査ポリシーをいったん無効にしてその列を暗号化または復号化し、その後でファイングレイン監査ポリシーを有効にすることは可能です。

関連項目:

データの暗号化: 例

inline_constraint

この句を使用すると、変更対象の列に制約を追加できます。既存の列に設定されている既存の制約の状態を変更する場合は、constraint_clausesを使用します。

LOB_storage_clause

LOB_storage_clauseは、LONG列をLOB列に変換する場合のみ、modify_col_properties内で使用できます。この場合のみ、LOB_storage_clauseを使用して列に対するLOB記憶域を指定できます。ただし、指定できるのは、1つの列(LOB_item)のみです。LOB_storage_clauseで省略したすべての属性には、デフォルトのLOB記憶域属性が適用されます。

alter_XMLSchema_clause

この句は、BINARY XML記憶域のXMLType表のmodify_col_properties内でのみ有効です。ALLOWおよびDISALLOW句の詳細は、「CREATE TABLE」のXMLSchema_spec」を参照してください。

列プロパティの変更の制限事項

列プロパティの変更には、次の制限事項があります。

  • LOB列のデータ型は変更できません。

  • 列にドメイン索引が定義されている場合は、表の列を変更できません。最初にドメイン索引を削除してから列を変更する必要があります。

  • 表または索引のパーティション化キーまたはサブパーティション化キーの一部である列の長さまたはデータ型は、変更できません。

  • CHAR型の列をVARCHAR2(またはVARCHAR)型に変更またはVARCHAR2(またはVARCHAR)型の列をCHAR型に変更できるのは、BLANK_TRIMMING初期化パラメータがTRUEに設定され、列のサイズが同じまたは増加する場合のみです。BLANK_TRIMMING初期化パラメータがTRUEに設定されている場合、列のサイズを切捨て後のデータの最大値以上の値まで減らすこともできます。

  • 表がクラスタの一部である場合は、LONGまたはLONG RAW列をLOBに変更できません。LONGまたはLONG RAW列をLOBに変更する場合は、同じALTER TABLE文では、DEFAULT句およびLOB_storage_clause以外は指定できません。

  • LONGまたはLONG RAW列をLOBに変更する場合のみ、LOB_storage_clausemodify_col_propertiesの一部として指定できます。

  • 索引構成表に対してROWIDデータ型の列は指定できませんが、UROWID型の列は指定できます。

  • 列のデータ型をREFに変更できません。

  • 重複表の列のプロパティは変更できません。

関連項目:

マテリアライズド・ビューの再検証の詳細は、「ALTER MATERIALIZED VIEW」を参照してください。

modify_virtcol_properties

この句を使用すると、仮想列を次の方法で変更できます。

  • COLLATE句を指定すると、仮想列のデータ・バインドされた照合を設定または変更できます。column_collation_nameには、有効な名前付き照合または疑似照合を指定します。データ・バインドされた照合の詳細は、「CREATE TABLE」の「DEFAULT COLLATION」句を参照してください。

  • 仮想列がエディショニングされたPL/SQLファンクションを参照している場合、その仮想列の評価エディションまたは使用禁止エディションを変更できます。仮想列を変更する場合のevaluation_edition_clauseおよびunusable_editions_clauseのセマンティクスは、仮想列を作成する場合と同じです。詳細は、「CREATE TABLE」の「evaluation_edition_clause」および「unusable_editions_clause」を参照してください。

仮想列の変更の制限事項

仮想列の変更には、次の制限事項が適用されます。

  • COLLATE句の指定による仮想列のデータ・バインドされた照合の設定または変更には、「列照合の変更の制限事項」に示されている制限事項が適用されます。

  • 索引が仮想列で定義されている場合に、その評価エディションまたは使用禁止エディションを変更すると、データベースによってその仮想列のすべての索引が無効化されます。仮想列の他のプロパティを変更しようとすると、エラーが発生します。

modify_col_visibility

この句を使用すると、columnの可視性を変更できます。詳細は、「CREATE TABLE」の「VISIBLE | INVISIBLE」を参照してください。

列の可視性の変更の制限事項

SYSが所有している表で、VISIBLE列をINVISIBLEに変更することはできません。

modify_col_substitutable

この句を使用すると、既存のオブジェクト型列の代替性を設定または変更できます。

FORCEキーワードを指定すると、型ID情報またはサブタイプ属性に関するデータが含まれる非表示列が削除されます。オブジェクト型の列または属性がFINALでない場合、FORCEを指定する必要があります。

列の代替性の変更の制限事項

列の代替性の変更には、次の制限事項があります。

  • ALTER TABLE文には、この句を一度のみ指定できます。

  • オブジェクト表自体の代替性が設定されている場合、オブジェクト表の列の代替性は変更できません。

  • この句は、列がIS OF TYPE構文を使用して作成または追加されたものである場合は指定できません(この構文を使用すると、オブジェクト列や属性で使用できるサブタイプの範囲が、特定のサブタイプに限定されます)。IS OF TYPE構文の詳細は、CREATE TABLEsubstitutable_column_clause」を参照してください。

  • 列の属性にネストしたオブジェクト型(FINAL以外)が含まれる場合、FORCEを指定しても、VARRAY列をNOT SUBSTITUTABLEに変更できません。

drop_column_clause

drop_column_clauseを使用すると、不要になった列を削除したり、将来、システム・リソースへの要求が少なくなったときに削除するように列にマークを付けることによって、データベースの領域を解放できます。

  • ネストした表の列を削除すると、その記憶表も削除されます。

  • LOB列を削除すると、LOBデータおよび対応するLOB索引セグメントも削除されます。

  • BFILE列を削除すると、その列に格納されたロケータのみ削除され、ロケータによって参照されるファイルは削除されません。

  • INCLUDING列として定義した列を削除(または未使用とマーク)すると、この列の直前に格納された列が新しいINCLUDING列になります。

SET UNUSED句

SET UNUSEDを使用すると、1つ以上の列が未使用としてマーク付けされます。内部ヒープ構成表の場合は、この句を指定しても、対象の列が表の各行から実際に削除されることはありません。その列に使用されているディスク領域がリストアされることはありません。したがって、応答時間はDROP句を実行したときよりも短縮されます。

外部表内の列に対してこの句を指定すると、句は透過的にALTER TABLE ... DROP COLUMN文に変換されます。その理由は、外部表に対する操作はメタデータのみの操作であるため、2つのコマンドのパフォーマンスに違いがないためです。

UNUSEDのマークが付いた列を持つすべての表は、データ・ディクショナリ・ビューUSER_UNUSED_COL_TABSDBA_UNUSED_COL_TABSおよびALL_UNUSED_COL_TABSで参照できます。

関連項目:

データ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

未使用列のデータは表の行に残っていますが、この列は削除されたものとして扱われます。UNUSEDのマークが付けられた列にはアクセスできなくなります。SELECT *問合せでも、未使用列からデータを取り出すことはできません。また、UNUSEDのマークが付けられた列の名前および型は、DESCRIBEコマンドでは表示されず、未使用列と同じ名前の新しい列を表に追加できます。

注意:

これらの列を実際に削除するまでは、表当たり1000列の制限に対して、これらの列もカウント対象になります。ただし、すべてのDDL文と同様に、この句の結果をロールバックすることはできません。SET UNUSED列を取り出すために、対応するSET USEDを発行することはできません。1000列の制限の詳細は、「CREATE TABLE」を参照してください。

また、LONG列にUNUSEDのマークを付けた場合、この未使用のLONG列を実際に削除しないかぎり、その表には別のLONG列を追加できません。

ONLINE

ONLINEを指定すると、表に対するDML操作を許可しながら、列にUNUSEDのマークを付けることを指定できます。

列へのUNUSEDのマーク付けの制限事項

SET UNUSED句には、次の制限事項が適用されます。

  • ONLINE句は、DEFERRABLE制約で列をUNUSEDとしてマークする場合は指定できません。

  • SYSが所有する表の列にUNUSEDのマークを付けることはできません。

DROP句

DROPを指定すると、表のそれぞれの行から、対象となる列に関連付けられた列記述子およびデータを削除できます。特定の列を明示的に削除した場合、対象の表でUNUSEDのマークが付いている列もすべて同時に削除されます。

列データを削除した場合、次のものが削除されます。

  • 対象の列に定義されているすべての索引。

  • 対象の列を参照しているすべての制約。

  • 対象の列に統計タイプが関連付けられている場合、FORCEオプションによって、関連付けは解除され、その統計タイプを使用して収集したすべての統計情報は削除されます。

注意:

対象の列が対象でない列の親キーである場合またはCHECK制約が対象である列と対象でない列の両方を参照している場合は、Oracle Databaseはエラーを戻し、CASCADE CONSTRAINTS句を指定しないかぎり、列を削除しません。この句を指定した場合、対象である列を参照しているすべての制約が削除されます。

関連項目:

統計タイプの関連付けの解除方法の詳細は、「DISASSOCIATE STATISTICS」を参照してください。

DROP UNUSED COLUMNS句

DROP UNUSED COLUMNSを指定すると、未使用とマークされているすべての列を表から削除できます。表の未使用の列からディスク領域を回収する場合に、この文を使用します。表に未使用の列がない場合でも、エラーは戻されません。

column

未使用として設定または削除する1つ以上の列を指定します。列を1つのみ指定する場合にかぎり、COLUMNキーワードを使用します。列リストを指定する場合、リストには重複する列を指定できません。

CASCADE CONSTRAINTS

CASCADE CONSTRAINTSを指定すると、削除する列に定義されている主キーおよび一意キーを参照する外部キー制約をすべて削除したり、削除する列に定義されているすべての複数列制約を削除することができます。他の表の列、または対象である表の他の列が参照している制約がある場合は、CASCADE CONSTRAINTSを指定する必要があります。CASCADE CONSTRAINTSを指定しない場合、その文は異常終了し、エラーが戻されます。

INVALIDATE

INVALIDATEキーワードはオプションです。ビュー、トリガー、ストアド・プログラム・ユニットなどのすべての依存オブジェクトが自動的に無効になります。オブジェクトの無効化は再帰的プロセスです。したがって、すべての直接的な依存オブジェクトおよび間接的な依存オブジェクトが無効になります。ただし、データベースでは、リモート依存性をローカル依存性と別に管理しているため、ローカル依存性のみが無効になります。

この文によって無効となったオブジェクトは、次に参照された際に自動的に再検証されます。オブジェクトを参照する前に、オブジェクトに存在するエラーは、すべて修正しておく必要があります。

関連項目:

依存性の詳細は、『Oracle Database概要』を参照してください。

CHECKPOINT

CHECKPOINTを指定すると、DROP COLUMN操作でinteger行が処理された後にチェックポイントが適用されます。integerはオプションであり、1以上である必要があります。integerが表の行数より大きい場合は、すべての行が処理された後にチェックポイントが適用されます。integerを指定しない場合は、デフォルトの512に設定されます。チェックポイントを適用すると、DROP COLUMN操作中に蓄積されるUNDOログの量が削減されるため、UNDO領域の不足を回避できます。ただし、この文が中断されたときにすでにチェックポイントが適用されていた場合は、表は使用禁止の状態のままになります。使用禁止状態の表に対して実行可能な操作は、DROP TABLETRUNCATE TABLEおよびALTER TABLE DROP ... COLUMNS CONTINUE(後述)のみです。

この句は列データを削除しないため、SET UNUSEDと同時に使用できません。

DROP COLUMNS CONTINUE句

DROP COLUMNS CONTINUEを指定すると、中断されたところから列削除操作を続行できます。表が無効な状態にあるときにこの文を発行すると、エラーになります。

列の削除の制限事項

列の削除には、次の制限事項があります。

  • この句の各部分は、文の中で1回のみ指定でき、他のALTER TABLE句と同時に使用することはできません。たとえば、次のような文は許可されません。

    ALTER TABLE t1 DROP COLUMN f1 DROP (f2);
    ALTER TABLE t1 DROP COLUMN f1 SET UNUSED (f2);
    ALTER TABLE t1 DROP (f1) ADD (f2 NUMBER);
    ALTER TABLE t1 SET UNUSED (f3) 
       ADD (CONSTRAINT ck1 CHECK (f2 > 0));
    
  • オブジェクト型の列は、エンティティとしてのみ削除できます。オブジェクト型の列から属性を削除するには、ALTER TYPE ... DROP ATTRIBUTE文をCASCADE INCLUDING TABLE DATA句とともに使用します。属性の削除は、すべての依存オブジェクトに影響することに注意してください。詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

  • 索引構成表からは、主キー列でない場合にかぎり、列を削除できます。索引構成表の主キー制約は削除できないため、CASCADE CONSTRAINTSを指定しても主キー列は削除できません。

  • 削除した列または未使用の列を含む表をエクスポートできます。ただし、エクスポート・ファイルに指定されたすべての列が表に存在する(これらの列のいずれも削除または未使用のマークを付けられていない)場合のみ、その表をインポートできます。そうでない場合は、エラーが戻ります。

  • COMPRESS BASICを使用する表の列を未使用として設定できますが、その列を削除することはできません。ただし、drop_column_clauseのすべての句は、ROW STORE COMPRESS ADVANCEDを使用する表に対して有効です。詳細は、table_compression」のセマンティクスを参照してください。

  • ドメイン索引が構築されている列は削除できません。

  • REF列からはSCOPE表制約およびWITH ROWID制約を削除できません。

  • 次のものは、この句を使用して削除できません。

    • 疑似列、クラスタ列またはパーティション列。パーティションが作成されたすべての表領域がオンラインで読取り/書込みモードである場合、パーティション表から非パーティション列を削除できます。

    • ネストした表の列、オブジェクト表の列、重複表の列またはSYSが所有する表の列。

関連項目:

列の削除: 例

add_period_clause

add_period_clauseを使用すると、有効な時間ディメンションをtableに追加できます。

ALTER TABLEperiod_definition句は、CREATE TABLEと同じセマンティクスを持ちます。ただし、次の例外と追加事項があります。

  • valid_time_columntableにすでに存在していてはいけません。

  • start_time_columnend_time_columnを指定する場合、これらの列がtableにすでに存在する必要があります。または、これらの各列に対してadd_column_clauseを指定する必要があります。

  • start_time_columnend_time_columnを指定した場合で、これらの列がtableにすでに存在し、データが移入されているときは、この両方の列の値がNULLでないすべての行で、start_time_columnの値がend_time_columnの値より前である必要があります。

関連項目:

この句のセマンティクスの詳細は、CREATE TABLE period_definitionを参照してください。

drop_period_clause

drop_period_clauseを使用すると、有効な時間ディメンションをtableから削除できます。

valid_time_columnには、削除する有効な時間ディメンションの名前を指定します。

この句には次のような効果があります。

  • valid_time_columntableから削除されます。

  • CREATE TABLE ... period_definitionまたはALTER TABLE ... add_period_clauseを使用して有効な時間ディメンションを作成したときに開始時間列と終了時間列が自動的に作成された場合は、これらの列が削除されます。それ以外の場合、これらの列はtableに残り、通常の表の列に戻ります。

関連項目:

valid_time_column、開始時間列、終了時間列の詳細は、CREATE TABLE period_definitionを参照してください。

rename_column_clause

rename_column_clauseを使用すると、tableの列名を変更できます。新しい列には、table内の他の列と同じ名前を指定しないでください。

列名を変更すると、依存オブジェクトは次のように処理されます。

  • 名前が変更された列に依存するファンクション索引およびCHECK制約は、引き続き有効です。

  • 依存するビュー、トリガー、ファンクション、プロシージャおよびパッケージは無効になります。これらのオブジェクトが次回アクセスされたときに、Oracle Databaseによって再有効化が試行されますが、再有効化に失敗した場合は、管理者がそのオブジェクトを変更して新しい列名を指定する必要があります。

  • 名前を変更する列にドメイン索引を定義している場合、ODCIIndexAlterメソッドがRENAMEオプション付きで起動されます。この操作によって、索引タイプ・メタデータと実表の間の対応が確立されます。

列名の変更の制限事項

列名の変更には、次の制限事項があります。

  • 同じ文の中で、この句を他のcolumn_clausesと同時に使用することはできません。

  • 結合索引の定義に使用される列名は変更できません。列名を変更する場合、索引を削除し、列名を変更してから、索引を再作成する必要があります。

  • 重複表の列の名前は変更できません。

関連項目:

列名の変更: 例

modify_collection_retrieval

modify_collection_retrieval句を使用すると、データベースからコレクション型の項目が取り出されたときの戻り値を変更できます。

collection_item

型がネストされた表またはVARRAYである、列修飾属性の名前を指定します。

RETURN AS

問合せの結果として何を戻り値とするかを指定します。

  • LOCATORは、ネストした表に対して一意のロケータを戻すことを指定します。

  • VALUEは、ネストした表のコピーをそのまま戻すことを指定します。

modify_LOB_storage_clause

modify_LOB_storage_clauseを使用すると、LOB_itemの物理属性を変更できます。各modify_LOB_storage_clauseに対して、LOB_itemを1つのみ指定できます。

以降の項では、modify_LOB_parametersに固有のパラメータのセマンティクスについて説明します。この項で特に指定がない場合は、残りのLOBパラメータのセマンティクスは、表の作成時と表の変更時で同じです。詳細は、この項の最後にある制限と、「CREATE TABLE」の句LOB_storage_parameters」を参照してください。

注意:

  • LOB記憶域に変更を加えるには、ALTER TABLE文を使用する方法と、DBMS_REDEFINITIONパッケージを使用したオンライン再定義による方法があります。LOB暗号化、圧縮または重複除外を作成時に有効にしなかった場合は、作成後にオンライン再定義を使用してこれらを有効にすることをお薦めします(この3つのパラメータの変更に対しては、この方法の方がディスク領域の効率の点で優れているため)。DBMS_REDEFINITIONの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

  • LOBの記憶域の種類を変換することはできません。かわりに、オンライン再定義またはパーティション交換を使用して、SecureFileまたはBasicFileを移行する必要があります。

PCTVERSION integer

この句の詳細は、「CREATE TABLE」の句「PCTVERSION integer」を参照してください。

LOB_retention_clause

データベースが自動UNDOモードで稼働している場合、旧バージョンのLOBを保持するには、PCTVERSIONではなくRETENTIONを指定します。この句によって、PCTVERSIONのこれまでの設定が上書きされます。

FREEPOOLS integer

データベースが自動UNDOモードで稼働している場合、BasicFiles LOBに対してこの句を使用するとLOBの空きリスト・グループ数を指定できます。この句によって、FREELIST GROUPSのこれまでの設定が上書きされます。このパラメータの詳細は、「CREATE TABLE」の句「FREEPOOLS integer」を参照してください。SecureFiles LOBの場合は、データベースはこのパラメータを無視します。

REBUILD FREEPOOLS

この句はBasicFiles LOBにのみ適用され、SecureFiles LOBには適用されません。REBUILD FREEPOOLS句を指定すると、LOB列から古いバージョンのデータがすべて削除されます。この句が役に立つのは、1つのLOBセグメント内に保持されている古いバージョンの領域をすべて削除する場合です(その領域が解放されて、すぐに新しいLOBデータに使用できるようになります)。

LOB_deduplicate_clause

この句は、SecureFiles LOBに対してのみ有効です。KEEP_DUPLICATESは、LOB重複除外を無効にします。DEDUPLICATEは、LOB重複除外を有効にします。セグメント内のすべてのLOBが読み取られ、一致するLOBがある場合は重複が除外されてから戻されます。

LOB_compression_clause

この句は、SecureFiles LOBに対してのみ有効です。COMPRESSは、セグメント内のすべてのLOBを圧縮して戻します。NOCOMPRESSは、セグメント内のすべてのLOBを圧縮解除して戻します。

ENCRYPT | DECRYPT

LOB暗号化は、一般に列の暗号化と同じセマンティクスを持ちます。詳細は、「ENCRYPT encryption_spec | DECRYPT」を参照してください。

CACHE, NOCACHE, CACHE READS

CACHEまたはNOCACHEからCACHE READSへ、またはCACHE READSからCACHEまたはNOCACHEへLOB列を変更するときに、ロギング属性を変更できます。LOGGINGまたはNOLOGGINGを指定しない場合、LOB列の現行ロギング属性がデフォルトになります。CACHENOCACHEまたはCACHE READSを指定しない場合、Oracle Databaseは、LOB属性の既存の値を保持します。

LOB記憶域の変更の制限事項

LOB記憶域の変更には、次の制限事項があります。

  • LOB記憶域属性を変更する場合、storage_clauseINITIALパラメータの値は変更できません。

  • 同じ文でallocate_extent_clausedeallocate_unused_clauseの両方を指定することはできません。

  • PCTVERSIONパラメータとRETENTIONパラメータの両方を指定することはできません。

  • shrink_clauseは、SecureFiles LOBに対して指定できません。

関連項目:

LOBパラメータの設定の詳細は、「CREATE TABLE」の「LOB_storage_clause」および「LOB列: 例」を参照してください。

alter_varray_col_properties

alter_varray_col_properties句を使用すると、VARRAYが格納されている既存のLOBの記憶特性を変更できます。

VARRAY列のプロパティの変更の制限事項

LOB_parametersTABLESPACE句をこの句の一部として指定することはできません。VARRAYに対するLOB表領域のデフォルトは、表を含む表領域になります。

REKEY encryption_spec

REKEY句を指定すると、データベースの新しい暗号化キーが生成されます。表内の暗号化されている列はすべて、新しいキーを使用して再度暗号化され、このときに、encryption_specUSING句が指定されている場合は新しい暗号化アルゴリズムが使用されます。この句は、このALTER TABLE文の中の他の句と組み合せることはできません。

関連項目:

列の透過的な暗号化の詳細は、『Oracle Database Advanced Securityガイド』を参照してください。

constraint_clauses

constraint_clausesを使用すると、表外宣言を使用して新しい制約を追加、既存の制約の状態を変更、および制約を削除できます。表外制約およびconstraint_stateのすべてのキーワードとパラメータの詳細は、constraint」を参照してください。

制約の追加

ADD句を使用すると、表外制約または表外REF制約を表に追加できます。

制約の追加の制限事項

制約の追加には、次の制限事項があります。

  • 重複表には制約を追加できません。

  • シャード表には外部キー制約を追加できません。

制約の変更

MODIFY CONSTRAINT句を使用すると、既存の制約の状態を変更できます。

CASCADEキーワードは、外部キー制約が定義されている一意制約または主キー制約を使用禁止にする場合にのみ有効です。この場合、CASCADEを指定することによって、一意制約または主キー制約とその依存するすべての外部キー制約を使用禁止にする必要があります。

制約の変更の制限事項

制約の変更には、次の制限事項があります。

  • NOT DEFERRABLE制約は、INITIALLY DEFERREDには変更できません。

  • 索引構成表にこの句を指定した場合、同じ文では他の句を指定できません。

  • 参照パーティション表の外部キー列のNOT NULL制約は変更できません。また、参照パーティション表の参照制約のパーティション化状態は変更できません。

  • 重複表の制約を変更することはできません。

制約名の変更

RENAME CONSTRAINT句を使用すると、tableの既存の制約名を変更できます。新しい制約名は、同一スキーマ内にあるオブジェクトの既存の制約と同じ名前にはできません。制約に依存するすべてのオブジェクトは、引き続き有効です。

関連項目:

制約名の変更: 例

drop_constraint_clause

drop_constraint_clauseを使用すると、データベースの整合性制約を削除できます。制約の適用を中止し、データ・ディクショナリから制約が削除されます。各drop_constraint_clauseには、制約を1つのみ指定できますが、1つの文の中では、複数のdrop_constraint_clauseを指定できます。

PRIMARY KEY

PRIMARY KEYを指定すると、tableの主キー制約を削除できます。

UNIQUE

UNIQUEを指定すると、指定した列の一意制約を削除できます。

ビットマップ結合索引が定義されている列から主キー制約または一意制約を削除すると、索引は無効になります。ビットマップ結合索引の詳細は、「CREATE INDEX」を参照してください。

CONSTRAINT

CONSTRAINT constraint_nameを指定すると、主キー制約または一意制約以外の整合性制約を削除できます。

CASCADE

CASCADEを指定すると、削除する整合性制約に依存するその他の整合性制約もすべて削除できます。

KEEP INDEX | DROP INDEX

KEEP INDEXまたはDROP INDEXを指定すると、PRIMARY KEYまたはUNIQUE制約の適用に使用する索引を残すか削除するかを指定できます。

ONLINE

ONLINEを指定すると、制約を削除して表に対するDML操作が許可されるようになります。

制約の削除の制限事項

制約の削除には、次の制限事項があります。

  • 参照整合性制約の一部の主キー制約または一意キー制約は、外部キーを削除しないと削除できません。参照されたキーと外部キーをともに削除する場合は、CASCADE句を使用してください。CASCADEを省略すると、外部キーによって参照される主キー制約および一意制約は削除されません。

  • 主キーをオブジェクト識別子(OID)として使用している表では、主キー制約は(CASCADE句を使用しても)削除できません。

  • REF列の参照整合性制約を削除した場合、REF列の有効範囲には参照先の表が含まれたままになります。

  • REF列の有効範囲は削除できません。

  • 参照パーティション表の外部キー列のNOT NULL制約は削除できません。また、参照パーティション表のパーティション化参照制約は削除できません。

  • 列に対するNOT NULL制約は、その列のデフォルトの列値がON NULL句を使用して定義されていると削除できません。

  • ONLINE句は、DEFERRABLE制約を削除しているときには指定できません。

関連項目:

制約の削除: 例

alter_external_table

alter_external_table句を使用すると、外部表の特性を変更できます。この句は、外部データには影響しません。parallel_clauseenable_disable_clauseexternal_table_data_propsおよびREJECT LIMIT句の構文およびセマンティクスは、CREATE TABLEの場合と同じです。「CREATE TABLE」のexternal_table_clauseを参照してください。

PROJECT COLUMN句

この句を使用すると、後続の問合せで、アクセス・ドライバが外部表に含まれる行を検証する方法を指定できます。デフォルトはPROJECT COLUMN ALLで、この場合、アクセス・ドライバは、選択されている列にかかわらず、すべての列の値を処理し、列のエントリが有効な行のみを検証します。いずれかの列の値でデータ型変換エラーなどのエラーが発生すると、その列がSELECT構文のリスト内で参照されていない場合でも、行が拒否されます。PROJECT COLUMN REFERENCEDを指定すると、アクセス・ドライバはSELECT構文のリスト内の列のみを処理します。

ALL設定の場合、一貫した結果セットが保証されます。REFERENCED設定の場合、後続の問合せで参照される列の数に応じて、戻される行の数が異なる可能性がありますが、ALL設定よりも高速です。後続の問合せで外部表のすべての列が選択されている場合、2つの設定の動作は同じになります。

外部表の変更の制限事項

外部表の変更には、次の制限事項があります。

  • この句以外の句を使用して外部表を変更できません。

  • LONG、VARRAYまたはオブジェクト型の列は外部表に追加できません。また、外部表の列のデータ型を、これらの型に変更できません。

  • 外部表の記憶域パラメータは変更できません。

alter_table_partitioning

ここで説明する句は、パーティション表にのみ適用されます。1つのALTER TABLE文の中では、パーティション操作を他のパーティション操作または実表での操作と組み合せて使用することはできません。

表のパーティション化の変更の注意事項

表のパーティション化の変更時には、次の注意事項が適用されます。

  • 1つ以上のマテリアライズド・ビューのマスター表で、パーティションを削除、交換、切捨て、移動、変更または分割した場合、その表に関する大量の既存ロード情報が削除されます。したがって、前述の操作のいずれかを行う前に、必ず依存するマテリアライズド・ビューをすべてリフレッシュしてください。

  • tableにビットマップ結合索引が定義されている場合、tableのパーティションの変更操作を実行すると、索引にUNUSABLEのマークが付けられます。

  • alter_table_partitioningの句のうち、参照パーティション表に対して指定できるのはmodify_table_default_attrsmove_table_[sub]partitiontruncate_partition_subpartおよびexchange_partition_subpartのみです。これらの操作が参照パーティション表の子表に対してカスケードすることはありません。これ以外のパーティション・メンテナンス操作は、参照パーティション表に対しては有効ではありませんが、参照パーティション表の親表に対して指定することは可能であり、その操作は子である参照パーティション表にカスケードします。

  • パーティションまたはサブパーティションを追加する際、表ごとに指定できるパーティションとサブパーティションの合計は1024K-1です。

  • 表のパーティションまたはサブパーティションを追加するときにパーティション名を省略すると、「一般的なパーティション化の注意事項」で説明されているルールに従い、データベースによって名前が生成されます。

  • 表のパーティションまたはサブパーティションに対して、移動、追加(ハッシュのみ)、結合、削除、分割、マージ、名前の変更、または切捨てを行った場合、その表を参照するプロシージャ、ファンクション、パッケージ、パッケージ本体、ビュー、型本体およびトリガーは、引き続き有効です。他の依存オブジェクトはすべて無効になります。

  • LOB列を使用した表に新規セグメントを作成するパーティションのメンテナンス操作の遅延セグメント作成は、サポートされていません。セグメントは含まれる(サブ)パーティションに常に作成されます。

  • シャード表では、表のパーティションおよびサブパーティションの変更に指定できる句は、UNUSABLE LOCAL INDEXESおよびREBUILD UNUSABLE LOCAL INDEXESのみです。システム・シャード表の個々のパーティションおよびサブパーティションに対して他の変更を実行することはできません。

  • ユーザー定義のシャード表では、パーティションおよびサブパーティションに対する次の操作がサポートされています。

    • パーティションの追加、サブパーティションの追加

    • パーティションの削除、サブパーティションの削除

    • パーティションの分割

    • リスト・パーティションで値を追加または削除するためのパーティションの変更

  • シャード表でサポートされるパーティション・メンテナンス操作は、パーティションおよびサブパーティションの切捨てのみです。シャード表でその他のパーティション・メンテナンス操作を実行することはできません。

関連するCONTEXTドメイン索引が含まれる表におけるパーティション操作の詳細は、『Oracle Textリファレンス』を参照してください。

ブロック・サイズが異なる表領域のパーティション化されたデータベース・エンティティの記憶域には、制限事項があります。これらの制限事項については、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

modify_table_default_attrs

modify_table_default_attrs句を使用すると、tableの属性に対する新しいデフォルト値を指定できます。文に指定した属性のみが影響を受けます。その後に作成するパーティションおよびLOBパーティションは、パーティションまたはLOBパーティションの作成時に明示的に上書きしないかぎり、この値を継承します。既存のパーティションおよびLOBパーティションは、この句の影響を受けません。

文の中で指定した属性のみが影響を受けます。指定されたデフォルト値は、個々のパーティションまたはLOBパーティションのレベルで指定された属性で上書きされます。

  • FOR partition_extended_nameは、コンポジット・パーティション表にのみ適用されます。この句は、partition_extended_nameで指定されたパーティションの属性に新しいデフォルト値を指定します。その後に作成するパーティションのサブパーティションおよびLOBパーティションは、サブパーティションまたはLOBパーティションの作成時に明示的に上書きしないかぎり、この値を継承します。既存のサブパーティションは、この句の影響を受けません。

    デフォルトのディレクトリを変更している場合は、DEFAULT DIRECTORY ディレクトリを使用してその場所を保存できます。

  • PCTTHRESHOLDprefix_compressionおよびalter_overflow_clauseは、パーティション化された索引構成表にのみ有効です。

  • 表レベルで接頭辞圧縮がすでに指定されている場合にかぎり、prefix_compression句を指定できます。また、COMPRESSキーワードの後にint型を指定することはできません。接頭辞の長さは、表の作成時にのみ指定できます。

  • 索引構成表の索引セグメントに対しては、segment_attributes句でPCTUSEDパラメータを指定できません。

  • read_only_clauseを使用すると、表のデフォルトの読取り専用または読取り/書込みモードを変更できます。新しいデフォルト・モードは、それ以降に表に追加されたパーティションまたはサブパーティションに割り当てられます。ただし、この動作は、新しいパーティションまたはサブパーティションにモードを指定することで上書きされます。表のデフォルトの読取り専用または読取り/書込みモードを変更するときには、表の既存のパーティションおよびサブパーティションのモードを変更しないでください。この句のセマンティクスの詳細は、「CREATE TABLE」の「read_only_clause」を参照してください。

  • indexing_clauseを使用すると、表に対するデフォルトの索引付けプロパティを変更できます。新しいデフォルトの索引付けプロパティは、それ以降に表に追加されたパーティションまたはサブパーティションに割り当てられます。ただし、この動作は、新しいパーティションまたはサブパーティションに索引付けプロパティを指定することで上書きされます。表のデフォルトの索引付けプロパティを変更しても、その表内に既存のパーティションまたはサブパーティションの索引付けプロパティが変更されることはありません。この句のセマンティクスの詳細は、CREATE TABLE「indexing_clause」を参照してください。

alter_automatic_partitioning

この句を使用すると、自動リスト・パーティション表を次のように管理できます。

  • SET PARTITIONING AUTOMATIC句を使用すると、通常のリスト・パーティション表を自動リスト・パーティション表に変換できます。

  • SET PARTITIONING MANUAL句を使用すると、自動リスト・パーティション表を通常のリスト・パーティション表に変換できます。

  • SET STORE IN句は、自動リスト・パーティション表に対してのみ指定できます。これを指定すると、それ以降に自動的に作成されたリスト・パーティションのデータをデータベースが格納する1つ以上の表領域を指定できます。この句は、以前にSET STORE IN句を発行することで表に対して設定された表領域を上書きします。

既存の表が自動リスト・パーティション表かどうかを判別するには、USER_DBA_ALL_PART_TABLESデータ・ディクショナリ・ビューのAUTOLIST列を問い合せます。

alter_automatic_partitioningの制限事項

DEFAULTパーティションを含む通常のリスト・パーティション表を自動リスト・パーティション表に変換することはできません。

関連項目:

自動リスト・パーティション表の詳細は、「CREATE TABLE」の「AUTOMATIC」句を参照してください。

alter_interval_partitioning

次の場合にこの句を使用します。

  • 既存のレンジ・パーティション表を時間隔パーティションに変換する場合。データベースにより、最後のレンジ・パーティションの最大値を超えるデータの必要に応じて、指定した数値範囲または日時間隔のパーティションが自動的に作成されます。その表に子の参照パーティション表が存在する場合、その子表は子の時間隔参照パーティション表に変換されます。

  • 既存の時間隔パーティション表の時間隔を変更する場合。データベースは、先に既存の時間隔パーティションをレンジ・パーティションに変換し、定義されたレンジ・パーティションの上限の値を決定します。次に、データベースにより、上限を超えたデータの必要に応じて、指定した数値範囲または日時間隔のパーティションが自動的に作成されます。

  • 既存の時間隔パーティション表の表領域の記憶域を変更する場合。その表に子の時間隔参照パーティション表が存在する場合、新しい表領域の記憶域は、専用の表レベルのデフォルト表領域を持たない子表に継承されます。

  • 時間隔パーティション表をレンジ・パーティション表に戻す場合。SET INTERVAL ()を使用して、時間隔パーティションを無効にします。データベースは、作成されるレンジ・パーティションの上限として、作成済の時間隔パーティションの上限を使用し、既存の時間隔パーティションをレンジ・パーティションに変換します。その表に子の時間隔参照パーティション表が存在する場合、その子表は通常の子の参照パーティション表に変換されます。

exprには、有効な数値または期間式を指定します。

関連項目:

時間隔パーティションの詳細は、「CREATE TABLE」の「INTERVAL句」および『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

set_subpartition_template

set_subpartition_template句は、個々の表パーティションのデフォルトのレンジ、リストまたはハッシュ・サブパーティション定義を作成するときや、既存の定義を置き換えるときに使用します。この句は、コンポジット・パーティション表に対してのみ有効です。既存のサブパーティション・テンプレートが置き換えられますが、テンプレートがまだ作成されていない場合は新規作成されます。既存のサブパーティションや、既存のローカルおよびグローバルの索引に影響が及ぶことはありません。ただし、以降のパーティション化操作(追加やマージなどの操作)には、新しいテンプレートが使用されます。

既存のサブパーティション・テンプレートを削除するには、ALTER TABLE table SET SUBPARTITION TEMPLATE ()を指定します。

set_subpartition_template句は、CREATE TABLEsubpartition_template句と同じセマンティクスを持ちます。詳細は、CREATE TABLEsubpartition_template句を参照してください。

modify_table_partition

modify_table_partition句を使用すると、レンジ・パーティション、ハッシュ・パーティション、リスト・パーティションまたはシステム・パーティションの実際の物理属性を変更できます。そのパーティションの1つ以上のLOB項目の記憶域属性を任意に変更できます。物理属性(制限事項については後述)、ロギングおよび記憶域パラメータに対して、新しい値を指定できます。

すべてのタイプのパーティションについて、パーティションを変更した結果、使用不可能になったローカル索引の処理方法も指定できます。「UNUSABLE LOCAL INDEXES句」を参照してください。

パーティション化された索引構成表の場合、パーティションの変更時にマッピング表も同時に更新できます。「alter_mapping_table_clauses」を参照してください。

read_only_clause

read_only_clauseを使用して、表パーティションを読取り専用または読取り/書込みモードにすることができます。この句のセマンティクスの詳細は、「CREATE TABLE」の「read_only_clause」を参照してください。

indexing_clause

indexing_clauseを使用すると、表パーティションの索引付けプロパティを変更できます。この索引付けプロパティにより、パーティションが表の部分索引に含まれるかどうかが決まります。indexing_clauseは、modify_range_partition句、modify_hash_partition句、およびmodify_list_partition句に指定できます。

INDEXING ONを指定すると、表パーティションの索引付けプロパティをONに変更できます。この操作は、表の全索引には作用しません。表の部分索引に対して、次のように作用します。

  • ローカルの部分索引: 表パーティションが、索引に含まれます。それに対応する索引パーティションは、再構築されてからUSABLEのマークが付けられます。

  • グローバルのパーティション索引: 表パーティションは、索引に含まれます。表パーティションの索引エントリは、定期の索引メンテナンスの一環として索引に追加されます。

INDEXING OFFを指定すると、表パーティションの索引付けプロパティをOFFに変更できます。この操作は、表の全索引には作用しません。表の部分索引に対して、次のように作用します。

  • ローカルの部分索引: 表パーティションが、索引から除外されます。それに対応する索引パーティションは、再構築されてからUNUSABLEのマークが付けられます。

  • グローバルの部分索引: 表パーティションが、索引から除外されます。表パーティションの索引エントリは、索引から削除されます。これは、メタデータ専用の操作であるため、索引エントリは索引内に物理的に格納され続けます。このような孤立した索引エントリは、ALTER INDEX文またはmodify_index_partition句で、COALESCE CLEANUPを指定すると削除できます。

オブジェクト型の列の制限事項

オブジェクト型を持つ表はパーティション化できません。パーティション状態へのALTER TABLE変更は、オブジェクト型の列がない非パーティション・ヒープ表でのみサポートされます。

indexing_clauseの制限事項

この句は、単純なパーティション表のパーティションに対してのみ指定できます。コンポジット・パーティション表の場合は、表サブパーティション・レベルでindexing_clauseを指定できます。詳細は、「modify_table_subpartition」を参照してください。

表パーティションの変更の注意事項

レンジ、リストおよびハッシュ表パーティションの操作には、次の注意事項が適用されます。

  • すべてのタイプの表パーティションについて、partition_attributes句でshrink_clauseを使用すると、各パーティションのセグメントを縮小できます。この句の詳細は、shrink_clause」を参照してください。

  • システム・パーティションを変更する構文およびセマンティクスは、ハッシュ・パーティションを変更する場合と同じです。modify_hash_partition」を参照してください。

  • tableがコンポジット・パーティション化されている場合:

    • allocate_extent_clauseを指定すると、partitionのそれぞれのサブパーティションにエクステントが割り当てられます。

    • deallocate_unused_clauseを指定すると、partitionのそれぞれのサブパーティションから未使用の記憶域の割当てが解除されます。

    • この句で変更された他の属性は、partitionのサブパーティションでも変更され、既存の値は上書きされます。既存のサブパーティションの属性が変更されないようにするには、modify_table_default_attrsFOR PARTITION句を使用します。

  • パーティション化されているネストした表を含む表パーティションのpartition_attributesを変更した場合、その変更内容は、変更した表パーティションに対応するネストした表パーティションには適用されません。ただし、ALTER TABLE文を使用すると、ネストした表パーティションの記憶表を直接変更できます。

  • 特に指定がないかぎり、partition_attributesの残りの句の動作は、パーティション表の作成時と同じです。詳細は、「CREATE TABLE」の「table_partitioning_clauses」を参照してください。

modify_range_partition

この句を使用すると、レンジ・パーティションの特性を変更できます。

add_range_subpartition

この句は、レンジ-レンジ・コンポジット・パーティションに対してのみ有効です。これにより、1つ以上のレンジ・サブパーティションをpartitionに追加できます。

Oracle Database 12cリリース2 (12.2)以降、この句を使用して、コンポジット・パーティション外部表にサブパーティションを追加できるようになりました。この場合、range_subpartition_desc句のオプションのexternal_part_subpart_data_props句を指定できます。この句のセマンティクスの詳細は、「external_part_subpart_data_props」を参照してください。

レンジ・サブパーティションの追加の制限事項

tableが索引構成表の場合は、一度に追加できるレンジ・サブパーティションは1つのみになります。

add_hash_subpartition

この句は、レンジ-ハッシュ・コンポジット・パーティションに対してのみ有効です。add_hash_subpartition句を使用すると、ハッシュ・サブパーティションをpartitionに追加できます。Oracle Databaseは、ハッシュ・ファンクションによってpartitionの他のサブパーティションから再ハッシュされた行を、新しいサブパーティションに移入します。ロード・バランシングを最適化する場合、サブパーティションの合計数は2の累乗にする必要があります。

partitioning_storage_clauseでサブパーティションに対して指定できる句は、TABLESPACE句のみです。TABLESPACEを指定しなかった場合、新しいサブパーティションはpartitionのデフォルトの表領域に格納されます。

選択したパーティションに対応するローカル索引パーティションが追加されます。

追加したパーティションに対応するローカル索引パーティションにUNUSABLEのマークが付けられます。ヒープ構成表のすべての索引が無効になります。update_index_clausesを使用し、操作中にこれらの索引を更新できます。

add_list_subpartition

この句は、レンジ-リストおよびリスト-リスト・コンポジット・パーティションに対してのみ有効です。これにより、1つ以上のリスト・サブパーティションをpartitionに追加できます。ただし、DEFAULTのサブパーティションが作成されていない場合に限られます。

  • この操作にはlist_values_clauseが必要です。また、list_values_clauseには、partitionのその他のサブパーティションには存在していない値を指定する必要があります。ただし、他のパーティションのサブパーティションで使用されている値は指定できます。

  • partitioning_storage_clauseでサブパーティションに対して指定できる句は、TABLESPACE句および表の圧縮のみです。

  • Oracle Database 12cリリース2 (12.2)以降、この句を使用して、コンポジット・パーティション外部表にサブパーティションを追加できるようになりました。この場合、list_subpartition_desc句のオプションのexternal_part_subpart_data_props句を指定できます。この句のセマンティクスの詳細は、「external_part_subpart_data_props」を参照してください。

追加されたサブパーティションごとに、Oracle Databaseは、表のすべてのローカル索引パーティションに、同じ値リストを持つサブパーティションも追加します。表の既存のローカル索引パーティションおよびグローバル索引パーティションは影響を受けません。

リスト・サブパーティションの追加の制限事項

リスト・サブパーティションの追加には、次の制限事項が適用されます。

  • この句は、このパーティションにDEFAULTのサブパーティションが作成されている場合は指定できません。その場合、split_list_subpartition句を使用して、DEFAULTパーティションを分割する必要があります。

  • tableが索引構成表の場合は、一度に追加できるリスト・サブパーティションは1つのみになります。

coalesce_table_subpartition

COALESCE SUBPARTITIONは、ハッシュ・サブパーティションにのみ適用されます。COALESCE SUBPARTITIONを使用すると、最後のハッシュ・サブパーティションが選択され、その内容が1つ以上の残りのサブパーティション(ハッシュ・ファンクションが決定)に分散された後、選択されたサブパーティションが削除されます。

  • 選択したパーティションに対応するローカル索引パーティションが削除されます。

  • 1つ以上の吸収パーティションに対応するローカル索引パーティションにUNUSABLEのマークが付けられます。ヒープ構成表のすべてのグローバル索引が無効になります。update_index_clausesを使用し、操作中にこれらの索引を更新できます。

modify_hash_partition

ハッシュ・パーティションに変更を加えるときは、partition_attributes句の中で指定できるのはallocate_extent_clauseおよびdeallocate_unused_clauseのみです。パーティションのそれ以外の属性はすべて、表レベルのデフォルトから継承されますが、TABLESPACEは作成時のままとなります。

modify_list_partition

リスト・パーティションを変更するときに使用できる句のセマンティクスは、レンジ・パーティションを変更するときと同じです。リスト・パーティションを変更する場合、次の句も使用できます。

ADD | DROP VALUES句

これらの句は、コンポジット・パーティションを変更する場合のみ有効です。これらの句によって、表のローカル索引とグローバル索引が影響を受けることはありません。

  • ADD VALUES句を使用すると、partitionpartition_key_valueリストが拡張され、追加した値が含まれます。追加するパーティションの値は、「CREATE TABLE」の句「list_partitions」に示すすべてのルールおよび制限事項に準拠する必要があります。

  • DROP VALUES句を使用すると、1つ以上のpartition_key_valueが削除され、partitionpartition_key_valueリストが縮小されます。この句を指定すると、Oracle Databaseはこの値の行が存在しないことを検証します。そのような行が存在する場合は、エラーが戻されます。

注意:

表にローカル同一キー索引が定義されている場合、DEFAULTリスト・パーティションのある表ではADD VALUES操作およびDROP VALUES操作が改善されます。

リスト値の追加および削除の制限事項

リスト値の追加および削除には、次の制限事項があります。

  • デフォルトのリスト・パーティションに対して値を追加または値を削除することはできません。

  • tableDEFAULTパーティションが定義されている場合、デフォルト・パーティション以外に値を追加しようとすると、その値がDEFAULTパーティションに存在しているかどうかが確認されます。デフォルト・パーティションにその値が存在する場合、エラーが戻されます。

modify_table_subpartition

この句は、コンポジット・パーティション表にのみ適用されます。その副次句によって、個別のレンジ、リストまたはハッシュ・サブパーティションの特性を変更できます。

shrink_clauseを使用すると、サブパーティションの各セグメントを縮小できます。この句の詳細は、shrink_clause」を参照してください。

また、パーティションを変更した結果、使用不可能になったローカル索引の処理方法も指定できます。「UNUSABLE LOCAL INDEXES句」を参照してください。

read_only_clauseを使用して、表サブパーティションを読取り専用または読取り/書込みモードにすることができます。この句のセマンティクスの詳細は、「CREATE TABLE」の「read_only_clause」を参照してください。

indexing_clauseを使用すると、表サブパーティションの索引付けプロパティを変更できます。索引付けプロパティにより、表の部分索引にサブパーティションを含めるかどうかが決まります。表サブパーティションの索引付けプロパティの変更による索引サブパーティションへの影響は、表パーティションの索引付けプロパティの変更による索引パーティションへの影響と同じです。詳細は、modify_table_partition「indexing_clause」を参照してください。

ハッシュ・サブパーティションの変更の制限事項

subpartitionに指定できるmodify_LOB_parametersは、allocate_extent_clauseおよびdeallocate_unused_clauseのみです。

ADD | DROP VALUES句

これらの句は、リスト・サブパーティションを変更する場合のみ有効です。これらの句によって、表のローカル索引とグローバル索引が影響を受けることはありません。

  • ADD VALUES句を使用すると、subpartitionsubpartition_key_valueリストが拡張され、追加した値が含まれます。追加するパーティションの値は、「CREATE TABLE」の句「list_partitions」に示すすべてのルールおよび制限事項に準拠する必要があります。

  • DROP VALUES句を使用すると、1つ以上のsubpartition_key_valueが削除され、subpartitionsubpartition_key_valueリストが縮小されます。この句を指定すると、Oracle Databaseはこの値の行が存在しないことを検証します。そのような行が存在する場合は、エラーが戻されます。

また、パーティションを変更した結果、使用不可能になったローカル索引の処理方法も指定できます。「UNUSABLE LOCAL INDEXES句」を参照してください。

リスト・サブパーティションの変更の制限事項

subpartitionに指定できるmodify_LOB_parametersは、allocate_extent_clauseおよびdeallocate_unused_clauseのみです。

move_table_partition

move_table_partition句を使用すると、partitionを別のセグメントへ移動できます。パーティション・データの別の表領域への移動、断片化を削減するためのデータの再クラスタ化、および作成時の物理属性の変更ができます。

表にLOB列が含まれている場合、LOB_storage_clauseを使用して、このパーティションに関連付けられたLOBデータおよびLOB索引セグメントを移動できます。この場合、指定したLOBのみが影響を受けます。特定のLOB列にLOB_storage_clauseを指定しなかった場合、その列のLOBデータおよびLOB索引セグメントは移動されません。

ネストした表の列が表に含まれる場合、table_partition_descriptionnested_table_col_properties句を使用すると、このパーティションに関連付けられているネストした表のセグメントを移動できます。この場合、指定しているネストした表のみが影響を受けます。特定のネストした表の列に対しtable_partition_descriptionnested_table_col_properties句を指定しなかった場合、そのセグメントは移動されません。

指定したパーティションに対応するローカル索引パーティションが、Oracle Databaseによって移動されます。移動したパーティションが空でない場合、UNUSABLEのマークが付けられます。ヒープ構成表のグローバル索引が無効になります。update_index_clausesを使用し、操作中にこれらの索引を更新できます。

LOBデータ・セグメントを移動する場合、古いデータ・セグメントおよび対応する索引セグメントが削除され、新しい表領域を指定しない場合でも、新しいセグメントが作成されます。

移動操作では、parallel_clause(指定されている場合)からパラレル属性が取得されます。parallel_clauseが指定されていない場合は、表のデフォルトのパラレル属性があれば、これが使用されます。いずれも指定されていない場合は、シリアルに移動が行われます。

MOVE PARTITIONparallel_clauseを指定した場合、tableのデフォルトのパラレル属性は変更されません。

注意:

索引構成表の場合、主キーのアドレスおよびその値を使用して、論理ROWIDが構成されます。論理ROWIDは、表の2次索引に格納されます。索引構成表のパーティションを移動した場合、ROWIDのアドレス部分が変更され、パフォーマンスの障害になる場合があります。最適なパフォーマンスを維持するには、移動したパーティションの2次索引を再構築し、ROWIDを更新してください。

MAPPING TABLE

MAPPING TABLE句は、マッピング表が定義されている索引構成表のみに有効です。マッピング表は、索引構成表のパーティションとともに移動されます。マッピング表のパーティションは、移動した索引構成表のパーティションの物理属性を継承します。これは、マッピング表のパーティションの属性を変更する唯一の方法です。この句を省略した場合、マッピング表のパーティションでは、元の属性が保持されます。

対応するすべてのビットマップ索引パーティションにはUNUSABLEのマークが付けられます。

この句の詳細は、「CREATE TABLE」のmapping_table_clauses」を参照してください。

ONLINE

ONLINEを指定すると、表パーティションの移動中に、表パーティションに対するDML操作が許可されるようになります。

ONLINE句の制限事項

表パーティションの移動時には、ONLINE句に次の制限事項が適用されます。

  • ONLINE句は、SYSが所有する表に対しては指定できません。

  • ONLINE句は、索引構成表には指定できません。

  • ONLINE句は、オブジェクト・タイプを格納するヒープ構成表や、ビットマップ結合索引またはドメイン索引が定義されているヒープ構成表には指定できません。

  • パラレルDMLおよびダイレクト・パスINSERT操作は、表に対する排他的ロックを必要とします。したがって、これらの操作は、競合するロックにより、実行中のオンライン・パーティションMOVEと同時にはサポートされません。

表パーティションの移動の制限事項

表パーティションの移動には、次の制限事項があります。

  • partitionがハッシュ・パーティションである場合、この句にTABLESPACEの属性以外は指定できません。

  • この句は、サブパーティションを含むパーティションに対して指定できません。ただし、move_table_subpartition句を使用してサブパーティションを移動できます。

move_table_subpartition

move_table_subpartition句を使用して、subpartition_extended_nameで識別されるサブパーティションを別のセグメントに移動します。TABLESPACEを指定しない場合、サブパーティションは同じ表領域に残ります。

サブパーティションが空でない場合、移動したサブパーティションに対応するすべてのローカル索引サブパーティションにUNUSABLEのマークが付けられます。update_index_clausesを使用し、操作中にヒープ構成表のすべての索引を更新できます。

表にLOB列が含まれている場合、LOB_storage_clauseを使用して、このサブパーティションに関連付けられたLOBデータおよびLOB索引セグメントを移動できます。この場合、指定したLOBのみが影響を受けます。特定のLOB列にLOB_storage_clauseを指定しなかった場合、その列のLOBデータおよびLOB索引セグメントは移動されません。

LOBデータ・セグメントを移動する場合、古いデータ・セグメントおよび対応する索引セグメントが削除され、新しい表領域を指定しない場合でも、新しいセグメントが作成されます。

ONLINE

ONLINEを指定すると、表サブパーティションの移動中に、表サブパーティションに対するDML操作が許可されるようになります。

ONLINE句の制限事項

表サブパーティションを移動するためのONLINE句には、表パーティションを移動するためのONLINE句と同じ制限事項があります。「ONLINE句の制限事項」を参照してください。

表サブパーティションの移動の制限事項

指定できるpartitioning_storage_clauseの句は、TABLESPACE句およびtable_compressionのみです。

add_external_partition_attrs

パーティション表に外部パラメータを追加するには、この句を使用します。

add_table_partition

add_table_partition句を使用すると、1つ以上のレンジ・パーティション、リスト・パーティション、またはシステム・パーティションをtableに追加できます。または、1つのハッシュ・パーティションをtableに追加できます。

追加されたパーティションごとに、Oracle Databaseは、tableに定義されているローカル索引に、実表のパーティションと同じ名前で新しいパーティションを追加します。索引に同じ名前のパーティションがすでに存在する場合、SYS_Pnという形式でパーティションの名前が生成されます。

tableが索引構成されている場合、追加されたパーティションごとに、Oracle Databaseは、表に定義されたすべてのマッピング表およびオーバーフロー領域にパーティションを追加します。

tableが参照パーティション表の親表の場合は、dependent_tables_clauseを使用して、この文に指定するパーティション・メンテナンス操作を参照パーティション表のすべての子表に伝播できます。

tableのデフォルトの索引付けプロパティは、新しい表パーティションに継承されます。これは、table_partition_description句にindexing_clauseを使用して、リスト・パーティション、レンジ・パーティション、またはシステム・パーティションの索引付けプロパティを設定するか、add_hash_partition_clauseindexing_clauseを使用して、ハッシュ・パーティションの索引付けプロパティを設定することで上書きできます。

コンポジット・パーティション表に追加されたパーティションごとに、Oracle Databaseは、同じサブパーティション記述を持つ新しい索引パーティションを、tableに定義されたすべてのローカル索引に追加します。tableのグローバル索引が影響を受けることはありません。新しい表パーティションに索引付けプロパティを指定すると、新しいサブパーティションは、そのパーティションの索引付けプロパティを継承します。それ以外の場合、新しいサブパーティションは、表のデフォルトの索引付けプロパティを継承します。これは、range_subpartition_desc句、individual_hash_subparts句、およびlist_subpartition_desc句でindexing_clauseを使用して、サブパーティションの索引付けプロパティを設定することで上書きできます。

BEFORE句

オプションのBEFORE句は、システム・パーティションをtableに追加するときにのみ指定できます。この句を使用すると、新しいパーティションを追加する場所を、既存のパーティションとの関係で指定できます。システム・パーティションは分割できません。そのため、この句は、既存の1つのパーティションの内容を複数の新しいパーティションに分割する場合に有効です。この句を省略した場合、新しいパーティションは既存のパーティションの後に追加されます。

表パーティションの追加の制限事項

tableが索引構成表の場合や、ローカル・ドメイン索引がtableに定義されている場合は、一度に追加できるパーティションは1つのみになります。

add_range_partition_clause

add_range_partition_clauseを使用すると、新しいレンジ・パーティションをレンジ・パーティション表またはコンポジット・レンジ・パーティション表の一番上(最後の既存のパーティションの後)に追加できます。

ドメイン索引がtableで定義されている場合、IN_PROGRESSまたはFAILEDのマークが付いていると無効になります。

レンジ・パーティションの追加の制限事項

レンジ・パーティションの追加には、次の制限事項があります。

  • 既存の上位パーティションにある各パーティション化キーのパーティションの上限がMAXVALUEの場合、表にパーティションを追加できません。そのかわり、split_table_partition句を使用して、表の始めまたは中間にパーティションを追加します。

  • prefix_compressionおよびOVERFLOW句は、パーティション化された索引構成表に対してのみ有効です。表レベルで接頭辞圧縮が使用可能な場合にかぎり、prefix_compressionを指定できます。パーティション表にすでにオーバーフロー・セグメントが存在する場合にかぎり、OVERFLOWを指定できます。

  • PCTUSEDパラメータは、索引構成表の索引セグメントに対して指定できません。

range_values_clause

新しいパーティションの上限を指定します。value_listは、パーティション・キー列に対応するリテラル値を順序どおりにカンマで区切ったリストです。value_listの値は、表内にある既存の最上位パーティションのパーティション境界より大きくする必要があります。

table_partition_description

この句を使用して、新しいパーティションに作成時の物理属性を指定できます。表にLOB列が含まれている場合、1つ以上のLOB項目にパーティション・レベルの属性を指定することもできます。

external_part_subpart_data_props

Oracle Database 12cリリース2 (12.2)以降、パーティション外部表およびコンポジット・パーティション外部表がサポートされるようになりました。これらの表にパーティションを追加する場合、オプションでこの句を使用して、パーティションにDEFAULT DIRECTORYおよびLOCATIONを指定できます。これらの句のセマンティクスの詳細は、「CREATE TABLE」の「DEFAULT DIRECTORY」および「LOCATION」を参照してください。

サブパーティションの説明

これらの句は、コンポジット・パーティション表に対してのみ有効です。新しいパーティションのサブパーティションを指定する場合は、range_subpartition_desclist_subpartition_descindividual_hash_subpartsまたはhash_subparts_by_quantity句を適切に使用します。この句によって、表レベルでsubpartition_templateに定義された任意のサブパーティションの設定は上書きされます。

add_hash_partition_clause

add_hash_partition_clauseを使用すると、ハッシュ・パーティション表の一番上に新しいハッシュ・パーティションを追加できます。Oracle Databaseは、ハッシュ・ファンクションによってtableの他のパーティションから再ハッシュされた行を、新しいパーティションに移入します。ロード・バランシングを最適化する場合、パーティションの合計数は2の累乗にする必要があります。

パーティションの名前を指定でき、パーティションが格納される表領域を指定することもできます。名前を指定しない場合は、SYS_Pnという形式のパーティション名が割り当てられます。TABLESPACEを指定しない場合は、新しいパーティションは表のデフォルトの表領域に格納されます。それ以外の属性は常に、表レベルのデフォルトから継承されます。

この操作によってパーティション間でデータが再ハッシュされると、対応するすべてのローカル索引パーティションにUNUSABLEのマークが付けられます。update_index_clausesを使用し、操作中にヒープ構成表のすべての索引を更新できます。

parallel_clauseを使用すると、新しいパーティションの作成をパラレル化するかどうかを指定できます。

read_only_clauseを使用して、表パーティションを読取り専用または読取り/書込みモードにすることができます。この句のセマンティクスの詳細は、「CREATE TABLE」の「read_only_clause」を参照してください。

indexing_clauseを使用すると、パーティションに索引付けプロパティを指定できます。この句を省略すると、そのパーティションはtableのデフォルトの索引付けプロパティを継承します。

関連項目:

ハッシュ・パーティション化の詳細は、「CREATE TABLE」および『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

add_list_partition_clause

add_list_partition_clauseを使用すると、パーティションの新しい一連の値を使用して、tableに新しいパーティションを追加できます。新しいパーティションに作成時の物理属性を指定できます。表にLOB列が含まれている場合、1つ以上のLOB項目にパーティション・レベルの属性を指定することもできます。

リスト・パーティションの追加の制限事項

表にDEFAULTパーティションをすでに定義している場合は、リスト・パーティションを追加できません。その場合、split_table_partition句を使用して、DEFAULTパーティションを分割する必要があります。

関連項目:

add_system_partition_clause

この句を使用すると、パーティションをシステム・パーティション表に追加できます。表に定義されているすべてのローカル索引に、対応する索引パーティションが追加されます。

table_partition_descriptionによって、新しいパーティションのパーティション・レベルの属性を指定できます。指定しない属性の値は、表レベルの値から継承されます。

システム・パーティションの追加の制限事項

システム・パーティションの追加時には、OVERFLOW句を指定できません。

関連項目:

システム・パーティションの詳細は、「CREATE TABLE」の句system_partitioning」を参照してください。

coalesce_table_partition

COALESCEは、ハッシュ・パーティションにのみ適用されます。coalesce_table_partition句を使用すると、最後のハッシュ・パーティションが選択され、その内容がハッシュ・ファンクションによって決定される1つ以上の残りのパーティションに分散された後、選択されたパーティションが削除されます。

選択したパーティションに対応するローカル索引パーティションが削除されます。1つ以上の吸収パーティションに対応するローカル索引パーティションにUNUSABLEのマークが付けられます。ヒープ構成表のすべての索引が無効になります。update_index_clausesを使用すると、操作中にすべての索引を更新できます。

表パーティションの結合の制限事項

update_all_indexes_clauseを使用してグローバル索引を更新する場合、副次句ではなくUPDATE INDEXESキーワードのみを指定できます。

drop_external_partition_attrs

パーティション表で外部パラメータを削除するには、この句を使用します。

drop_table_partition

drop_table_partition句は、パーティション表から、パーティションと、そのパーティションに含まれるデータを削除します。データを表に残したままパーティションを削除する場合は、そのパーティションを隣接するパーティションにマージする必要があります。

Oracle Database 12cリリース2 (12.2)以降、この句を使用して、パーティション表またはコンポジット・パーティション外部表からパーティションを削除できるようになりました。

関連項目:

merge_table_partitions

partition_extended_names句を使用して、1つ以上のパーティションを削除するように指定します。複数のパーティションを指定する場合は、構文図の上位ブランチに示すようにすべてのパーティションを名前で指定するか、構文図の下位ブランチに示すようにFOR句を使用してすべてのパーティションを指定する必要があります。両方のタイプの構文を1回の削除操作で使用することはできません。

  • tableにLOB列が存在する場合は、削除される表パーティションに対応するLOBデータ、LOB索引パーティション、およびサブパーティションも削除されます。

  • tableにパーティション化されているネストした表の列が含まれる場合は、削除される表パーティションに対応するネストした表パーティションも削除されます。

  • tableが索引構成されており、定義されたマッピング表を持つ場合、対応するマッピング表のパーティションも同様に削除されます。

  • ローカル索引パーティションおよび削除されるパーティションに対応するサブパーティションは、UNUSABLEのマークが付いている場合でも削除されます。

update_index_clausesを使用し、操作中にtableの索引を更新できます。グローバル索引の更新は、メタデータ専用のため、削除操作で削除されるレコードの索引エントリは索引に物理的に格納されたままになります。このような孤立した索引エントリは、ALTER INDEX文またはmodify_index_partition句で、COALESCE CLEANUPを指定すると削除できます。

update_index_clausesとともにparallel_clauseを指定すると、削除操作ではなく、索引の更新がパラレル化されます。

レンジ・パーティションを削除し、その後、削除したパーティションに属していた行を挿入した場合、1つ上位のパーティションに行が格納されます。ただし、そのパーティションが最上位のパーティションである場合、削除したパーティションが表していた値の範囲が表に対して無効になるため、挿入は失敗します。

表パーティションの削除の制限事項

表パーティションの削除には、次の制限事項があります。

  • ハッシュ・パーティション表のパーティションは削除できません。かわりに、coalesce_table_partition句を使用してください。

  • 表のすべてのパーティションを削除できません。かわりに表を削除します。

  • update_all_indexes_clauseを使用してグローバル索引を更新する場合、副次句ではなくUPDATE INDEXESキーワードのみを指定できます。

  • tableが索引構成表の場合や、ローカル・ドメイン索引がtableに定義されている場合は、一度に削除できるパーティションは1つのみになります。

  • 重複表のパーティションは削除できません。

drop_table_subpartition

この句を使用すると、レンジ、リスト、またはハッシュ・コンポジット・パーティション表からレンジまたはリスト・サブパーティションを削除できます。削除対象のサブパーティション内の行はすべて削除されます。

Oracle Database 12cリリース2 (12.2)以降、この句を使用して、コンポジット・パーティション外部表からサブパーティションを削除できるようになりました。

subpartition_extended_names句を使用して、1つ以上のサブパーティションを削除するように指定します。複数のサブパーティションを指定する場合は、構文図の上位ブランチに示すようにすべてのサブパーティションを名前で指定するか、構文図の下位ブランチに示すようにFOR句を使用してすべてのサブパーティションを指定する必要があります。両方のタイプの構文を1回の削除操作で使用することはできません。

ローカル索引の対応するサブパーティションは、自動的に削除されます。その他の索引サブパーティションには影響がありません。update_global_index_clauseまたはupdate_all_indexes_clauseを指定しないかぎり、グローバル索引にはUNUSABLEのマークが付けられます。グローバル索引の更新は、メタデータ専用のため、削除操作で削除されるレコードの索引エントリは索引に物理的に格納されたままになります。このような孤立した索引エントリは、ALTER INDEX文またはmodify_index_partition句で、COALESCE CLEANUPを指定すると削除できます。

表サブパーティションの削除の制限事項

表サブパーティションの削除には、次の制限事項があります。

  • ハッシュ・サブパーティションは削除できません。かわりに、MODIFY PARTITION ... COALESCE SUBPARTITION構文を使用してください。

  • パーティションのすべてのサブパーティションを削除できません。かわりに、drop_table_partition句を使用してください。

  • グローバル索引を更新する場合、update_all_indexes_clauseのオプションの副次句を指定することはできません。

  • tableが索引構成表の場合は、一度に削除できるサブパーティションは1つのみになります。

  • 複数のサブパーティションを削除する場合、すべてのサブパーティションは同じパーティションにある必要があります。

  • 重複表のサブパーティションは削除できません。

rename_partition_subpart

rename_partition_subpart句を使用すると、表パーティションまたは表サブパーティションの名前をnew_nameに変更できます。パーティションおよびサブパーティションのどちらの場合も、new_nameは同じ表に存在するすべてのパーティションおよびサブパーティションと異なる値である必要があります。

tableが索引構成されている場合、対応する主キー索引パーティションに、既存のオーバーフロー・パーティションおよびマッピング表パーティションと同じ名前が割り当てられます。

Oracle Database 12cリリース2 (12.2)以降、この句を使用して、パーティションまたはコンポジット・パーティション外部表のパーティションまたはサブパーティションの名前を変更できるようになりました。

truncate_partition_subpart

TRUNCATE partition_extended_namesを指定すると、partition_extended_namesで指定したパーティションからすべての行を削除することができ、表がコンポジット・パーティション化されている場合は、それらのパーティションのサブパーティションからすべての行が削除されます。個別のサブパーティションからすべての行を削除するには、TRUNCATE subpartition_extended_namesを指定します。tableが索引構成されている場合、対応するすべてのマッピング表のパーティションおよびオーバーフロー領域のパーティションが切り捨てられます。

複数のパーティションを指定する場合は、partition_extended_names構文図の上位ブランチに示すようにすべてのパーティションを名前で指定するか、構文図の下位ブランチに示すようにFOR句を使用してすべてのパーティションを指定する必要があります。両方のタイプの構文を1回の切捨て操作で使用することはできません。subpartition_extended_names句で複数のサブパーティションを指定する場合も同じルールが適用されます。

指定された各パーティションまたはサブパーティションについて、次の事項が適用されます。

  • 切り捨てるパーティションまたはサブパーティションにデータが含まれている場合は、まず、その表の参照整合性制約を使用禁止にする必要があります。また、別の方法として、行を削除してからパーティションを切り捨てる方法もあります。

  • tableにLOB列が存在する場合、このパーティションのLOBデータおよびLOB索引セグメントも切り捨てられます。tableがコンポジット・パーティション化されている場合、このパーティションのサブパーティションのLOBデータおよびLOB索引セグメントは切り捨てられます。

  • tableにパーティション化されているネストした表が含まれる場合、親パーティションに対応するネストした表パーティションが空でないかぎり、親パーティションを切り捨てることはできません。

  • tableでドメイン索引が定義されている場合、索引にIN_PROGRESSまたはFAILEDのマークが付いていると無効になります。また、切り捨てられる表パーティションに対応する索引パーティションにIN_PROGRESSのマークが付いていると無効になります。

切り捨てられるそれぞれのパーティションまたはサブパーティションでは、対応するローカル索引パーティションおよびサブパーティションも切り捨てられます。これらの索引パーティションまたはサブパーティションにUNUSABLEのマークが付いている場合、これらは切り捨てられ、UNUSABLEのマークはVALIDにリセットされます。

update_index_clausesを使用し、操作中にtableの索引を更新できます。グローバル索引の更新は、メタデータ専用のため、切捨て操作で削除されるレコードの索引エントリは索引に物理的に格納されたままになります。このような孤立した索引エントリは、ALTER INDEX文またはmodify_index_partition句で、COALESCE CLEANUPを指定すると削除できます。

update_index_clausesとともにparallel_clauseを指定すると、切捨て操作ではなく、索引の更新がパラレル化されます。

DROP STORAGE

DROP STORAGEを指定すると、MINEXTENTSパラメータで割り当てられた領域を除き、削除された行からすべての領域の割当てを解除できます。この領域は、後で表領域内の他のオブジェクトで使用できます。

DROP ALL STORAGE

DROP ALL STORAGEを指定すると、MINEXTENTSパラメータで割り当てられた領域も含め、削除された行からすべての領域の割当てを解除できます。パーティションまたはサブパーティションのすべてのセグメント、およびそれらの依存オブジェクトのすべてのセグメントも、割当てが解除されます。

DROP ALL STORAGEの制限事項

この句には、「遅延セグメント作成の制限事項」に示されているものと同じ制限事項があります。

REUSE STORAGE

REUSE STORAGEを指定すると、削除した行が占有していた領域をパーティションまたはサブパーティションに割り当てることができます。この領域は、そのパーティションまたはサブパーティションに対する、それ以降の挿入および更新のためにのみ使用できます。

CASCADE

CASCADEを指定すると、tableに含まれるすべての子の参照パーティション表で、対応するパーティションまたはサブパーティションを切捨てできます。

表のパーティションおよびサブパーティションの切捨ての制限事項

表のパーティションおよびサブパーティションの切捨てには、次の制限事項があります。

  • update_all_indexes_clauseを使用してグローバル索引を更新する場合、副次句ではなくUPDATE INDEXESキーワードのみを指定できます。

  • tableが索引構成表の場合や、ローカル・ドメイン索引がtableに定義されている場合は、一度に切捨てできる表パーティションまたは表サブパーティションは1つのみになります。

  • 重複表のパーティションまたはサブパーティションを切り捨てることはできません。

split_table_partition

split_table_partition句を使用すると、partition_extended_nameによって指定されるパーティションから新しいセグメント、物理属性および初期エクステントをそれぞれ含む、複数の新しいパーティションが作成されます。現行パーティションに対応付けられたセグメントは、廃棄されます。

新しいパーティションは、指定されていないすべての物理属性を現行パーティションから継承します。

注意:

一定の条件が満たされると、SPLIT PARTITIONおよびSPLIT SUBPARTITION操作を最適化して処理速度を上げることができます。これらの操作の最適化の詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

  • DEFAULTのリスト・パーティションを分割すると、最終的な結果のパーティションは、DEFAULTの値を保持するようになります。それ以外の結果のパーティションは、指定した分割値を保持するようになります。

  • tableが索引構成表である場合は、対応するマッピング表のパーティションが分割されて、親の索引構成表のパーティションと同じ表領域に配置されます。対応するオーバーフロー領域も分割されるので、OVERFLOW句を使用して新しいオーバーフロー領域のセグメント属性を指定できます。

  • tableにLOB列がある場合、LOB_storage_clauseを使用して、分割の結果生成されたLOBデータ・セグメントに対して個々のLOB記憶域属性を指定できます。現行パーティションのLOBデータおよびLOB索引セグメントが削除された後、新しい表領域を指定しなくても、各パーティションの各LOB列に新しいセグメントが作成されます。

  • tableにネストした表の列が含まれる場合、split_nested_table_part句を使用して、分割の結果生成されたネストした表セグメントに対して、記憶表名およびセグメント属性を指定できます。現行パーティションのネストした表セグメントが削除された後、各パーティションのネストした表の列ごとに新しいセグメントが作成されます。この句により、親表には、複数レベルのネストした表の列のみでなく、複数のネストした表の列を含めることが可能になります。

対応するローカル索引パーティションにUNUSABLEのマークが付いている場合でも、それらは分割されます。UNUSABLEのマークが付けられ、ユーザーは、分割パーティションに対応するローカル索引パーティションを再構築する必要があります。新しい索引パーティションの属性は、分割されたパーティションから継承されます。新しい索引パーティションは、分割された索引パーティションのデフォルト表領域に格納されます。索引パーティションにデフォルト表領域が定義されていない場合、基礎となる新しい表のパーティションの表領域が使用されます。

AT句

AT句は、レンジ・パーティションにのみ適用されます。この句を使用すると、1つのレンジ・パーティションを2つのレンジ・パーティションに分割できます。新しい2つのパーティションのうちの最初の方に、新しい上限(境界を含まない)を指定します。値リストは、現行パーティションの元のパーティション境界より小さく、その次に小さいパーティション(そのようなパーティションがある場合)のパーティション境界より大きい値にする必要があります。

VALUES句

VALUES句は、リスト・パーティションにのみ適用されます。この句を使用すると、1つのリスト・パーティションを2つのリスト・パーティションに分割できます。1つのキー列で表がパーティション化されている場合は、list_values構文の上位ブランチを使用して、その列の値リストを指定します。NULLを指定できるのは、表内の別のパーティションに対してまだNULLが指定されていない場合です。複数のキー列で表がパーティション化されている場合は、list_values構文の下位ブランチを使用して、値リストを指定します。各値リストはカッコで囲まれ、キー列の値のリストを表します。新しいパーティションのうち、最初のものは指定のlist_valuesを使用して作成され、2つ目のパーティションは現行パーティションの残りのパーティション値を使用して作成されます。このため、値リストには現行パーティションのすべてのパーティション値を含めることはできません。また、現行パーティションに存在しないパーティション値も含めることはできません。

INTO句

INTO句を使用すると、分割の結果生成される新しいパーティションを記述できます。

  • AT ... INTO句を使用すると、1つのレンジ・パーティションを2つのレンジ・パーティションに分割することによって生成されるパーティションについて記述できます。range_partition_descには、分割の結果としての2つのパーティションについて、オプションの名前と物理属性の指定を省略している場合でも、キーワードPARTITIONが必要になります。新しいパーティション名を指定しない場合、SYS_Pnという形式の名前が割り当てられます。指定しないすべての属性は、現行パーティションから継承されます。

  • VALUES ... INTO句を使用すると、1つのリスト・パーティションを2つのリスト・パーティションに分割することによって生成されるパーティションについて記述できます。list_partition_descには、分割の結果としての2つのパーティションについて、オプションの名前と物理属性の指定を省略している場合でも、キーワードPARTITIONが必要になります。新しいパーティション名を指定しない場合、SYS_Pnという形式の名前が割り当てられます。指定しないすべての属性は、現行パーティションから継承されます。

  • INTO句を使用すると、1つのレンジ・パーティションを2つ以上のレンジ・パーティションに分割できます。または、1つのリスト・パーティションを2つ以上のリスト・パーティションに分割できます。新しいパーティション名を指定しない場合、SYS_Pnという形式の名前が割り当てられます。指定しないすべての属性は、現行パーティションから継承されます。

    • 各レンジ・パーティションは、それらのパーティション境界を昇順で指定する必要があります。最初に指定するレンジ・パーティションのパーティション境界は、その次に低いパーティションが表内に存在する場合、そのパーティション境界よりも大きくする必要があります。最後のレンジ・パーティションのパーティション境界は指定できません。これは、現在のパーティションのパーティション境界を継承します。

    • リスト・パーティションの場合は、新しいパーティションに指定されたすべてのパーティション値が、現在のパーティション内に存在する必要があります。最後のパーティションには、パーティション値を指定できません。Oracle Databaseは、残りのパーティション値を使用して、現在のパーティションから最後のパーティションを作成します。

レンジ-ハッシュ・コンポジット・パーティション表の場合、新しいパーティションにサブパーティションを指定するとき、サブパーティションに対してTABLESPACEおよび表の圧縮のみを指定できます。他のすべての属性は、現行パーティションから継承されます。新しいパーティションにサブパーティション化を指定しない場合は、表領域も現行パーティションから継承されます。

レンジ-リストおよびリスト-リスト・コンポジット・パーティション表の場合、新しいパーティションにサブパーティションを指定できません。分割パーティションのリスト・サブパーティションでは、サブパーティションの数および値リストは現行パーティションから継承されます。

新しく作成したサブパーティションに対して名前を指定しなかったすべてのコンポジット・パーティション表では、次のように名前が親パーティションから継承されます。

  • 親パーティション内のサブパーティションがpartition_nameアンダースコア(_)subpartition_nameという形式の名前(たとえば、P1_SUBP1)を持つ場合、新しいパーティション名に基づいて、サブパーティションの名前が生成されます(たとえば、P1A_SUB1P1B_SUB1)。

  • 親パーティション内のサブパーティションがその他の形式の名前を持つ場合、SYS_SUBPnという形式のサブパーティション名が生成されます。

索引にUNUSABLEのマークが付いている場合でも、tableで定義されている各ローカル索引の対応するパーティションが分割されます。

tableが参照パーティション表の親表の場合は、dependent_tables_clauseを使用して、この文に指定するパーティション・メンテナンス操作を参照パーティション表のすべての子表に伝播できます。

ヒープ構成表のすべての索引が無効になります。update_index_clausesを使用し、操作中にこれらの索引を更新できます。

parallel_clauseを使用すると、表のデフォルトのパラレル属性を変更せずに、分割操作をパラレル化できます。

ONLINE

ONLINEを指定すると、表パーティションの分割中に、表に対するDML操作が許可されるようになります。

ONLINE句の制限事項

表パーティションの分割時には、ONLINE句に次の制限事項が適用されます。

  • ONLINE句は、SYSが所有する表に対しては指定できません。

  • ONLINE句は、索引構成表には指定できません。

  • ONLINE句は、表でドメイン索引が定義されている場合は指定できません。

  • ONLINE句は、オブジェクト型を格納するヒープ構成表や、ビットマップ結合索引が定義されているヒープ構成表には指定できません。

  • パラレルDMLおよびダイレクト・パスINSERT操作は、表に対する排他的ロックを必要とします。したがって、ロックが競合するため、これらの操作は実行中のオンライン・パーティション分割と同時にはサポートされません。

表パーティションの分割の制限事項

表パーティションの分割には、次の制限事項があります。

  • この句は、ハッシュ・パーティションには指定できません。

  • parallel_clauseは、索引構成表には指定できません。

  • tableが索引構成表の場合や、ローカル・ドメイン索引がtableに定義されている場合は、パーティションは2つの新しいパーティションにのみ分割可能です。

split_table_subpartition

この句を使用すると、1つのサブパーティションを、重複しない値リストを持つ複数の新しいサブパーティションに分割できます。

注意:

一定の条件が満たされると、SPLIT PARTITIONおよびSPLIT SUBPARTITION操作を最適化して処理速度を上げることができます。これらの操作の最適化の詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

AT句

AT句は、レンジ・サブパーティションに対してのみ有効です。新しい2つのサブパーティションのうちの1つ目に、新しく上限(この値は含まない)を指定します。値リストは、subpartition_extended_nameで指定されるサブパーティションの元のサブパーティション境界より小さく、その次に小さいサブパーティション(そのようなパーティションがある場合)のパーティション境界より大きい値にする必要があります。

VALUES句

VALUES句は、リスト・サブパーティションに対してのみ有効です。1つのキー列で表がサブパーティション化されている場合は、list_values構文の上位ブランチを使用して、その列の値リストを指定します。NULLを指定できるのは、まだ同じパーティション内の別のサブパーティションに対してNULLが指定されていない場合です。複数のキー列で表がサブパーティション化されている場合は、list_values構文の下位ブランチを使用して、値リストを指定します。各値リストはカッコで囲まれ、キー列の値のリストを表します。新しいサブパーティションのうち、最初のものは指定のサブパーティション値リストを使用して作成され、2つ目のパーティションは、現行サブパーティションの残りのパーティション値を使用して作成されます。このため、値リストには現行のサブパーティションのすべてのパーティション値を含めることはできません。また、現行のサブパーティションに存在しないパーティション値も含めることはできません。

INTO句

INTO句を使用すると、分割の結果生成される新しいサブパーティションを記述できます。

  • AT ... INTO句を使用すると、1つのレンジ・パーティションを2つのレンジ・パーティションに分割することによって生成される2つのサブパーティションについて記述できます。2つの新しいサブパーティションのオプションの名前と属性を指定しない場合でも、range_subpartition_descには、キーワードSUBPARTITIONが必要になります。新しいサブパーティションの名前を省略すると、Oracle Databaseは、SYS_SUBPnの形式の名前を割り当てます。指定されていない属性があると、その属性は現在のサブパーティションから継承されます。

  • VALUES ... INTO句を使用すると、1つのリスト・パーティションを2つのリスト・パーティションに分割することによって生成される2つのサブパーティションについて記述できます。2つの新しいサブパーティションについてのオプションの名前と属性を指定しない場合でも、list_subpartition_descには、キーワードSUBPARTITIONが必要になります。新しいサブパーティションの名前を省略すると、Oracle Databaseは、SYS_SUBPnの形式の名前を割り当てます。指定されていない属性があると、その属性は現在のサブパーティションから継承されます。

  • INTO句を使用すると、1つのレンジ・サブパーティションを2つ以上のレンジ・サブパーティションに分割できます。または、1つのリスト・サブパーティションを2つ以上のリスト・サブパーティションに分割できます。新しいサブパーティション名を指定しない場合、SYS_SUBPnという形式の名前が割り当てられます。指定しないすべての属性は、現行のサブパーティションから継承されます。

    • 各レンジ・サブパーティションは、それらのサブパーティション境界を昇順で指定する必要があります。最初に指定するレンジ・サブパーティションのサブパーティション境界は、その次に低いサブパーティションが存在する場合、そのサブパーティション境界よりも大きくする必要があります。最後のレンジ・サブパーティションのサブパーティション境界は指定できません。これは、現在のサブパーティションのパーティション境界を継承します。

    • リスト・サブパーティションの場合は、新しいサブパーティションに指定されたすべてのサブパーティション値が、現在のサブパーティション内に存在する必要があります。最後のサブパーティションには、サブパーティション値を指定できません。Oracle Databaseは、残りのパーティション値を使用して、現在のサブパーティションから最後のサブパーティションを作成します。

対応するローカル索引サブパーティションにUNUSABLEのマークが付いている場合でも、それらは分割されます。新しい索引サブパーティションに名前があらかじめ指定されていないかぎり、新しい表のサブパーティションの名前が継承されます。この場合、SYS_SUBPnという形式の新しい索引サブパーティション名が割り当てられます。新しい索引サブパーティションの物理属性は、親サブパーティションから継承されます。親サブパーティションにデフォルトのTABLESPACE属性が定義されていない場合、対応する新しい表のサブパーティションの表領域が継承されます。

ヒープ構成表の索引が無効になります。update_index_clausesを使用し、これらの索引を更新できます。

ONLINE

ONLINEを指定すると、表サブパーティションの分割中に、表に対するDML操作が許可されるようになります。

ONLINE句の制限事項

表サブパーティションを分割するためのONLINE句には、表パーティションを分割するためのONLINE句と同じ制限事項があります。「ONLINE句の制限事項」を参照してください。

表サブパーティションの分割の制限事項

表サブパーティションの分割には、次の制限事項があります。

  • この句は、ハッシュ・サブパーティションに対して指定できません。

  • サブパーティションの定義で指定できるpartitioning_storage_clauseの句は、TABLESPACEおよび表の圧縮のみです。

  • parallel_clauseは、索引構成表には指定できません。

  • tableが索引構成表の場合は、そのサブパーティションは2つの新しいサブパーティションにのみ分割可能です。

merge_table_partitions

merge_table_partitions句を使用すると、tableの2つ以上のレンジ・パーティション、リスト・パーティション、またはシステム・パーティションの内容を1つの新しいパーティションにマージして、元のパーティションを削除できます。この句はハッシュ・パーティションでは無効です。かわりに、coalesce_table_partition句を使用してください。

マージする2つ以上のレンジ・パーティション、リスト・パーティション、またはシステム・パーティションのカンマ区切りリストを指定します。TO句を使用すると、マージする2つ以上の隣接しているレンジ・パーティションを指定できます。

各パーティションに、partitionを使用してパーティション名を指定するか、またはFOR句を使用して名前なしでパーティションを指定します。FOR句の詳細は、「パーティション表と索引の参照」を参照してください。

  • マージするパーティションは、隣接している必要があり、そのパーティションがレンジ・パーティションの場合は、パーティション境界を昇順で指定する必要があります。リスト・パーティションおよびシステム・パーティションをマージする場合は、隣接している必要はありません。

  • レンジ・パーティションをマージすると、新しいパーティションは、元のパーティションのうち上位のパーティションのパーティション境界を継承します。

  • リスト・パーティションをマージする場合、結果のパーティションの値リストは、マージされるパーティションの値リストの集合をあわせたものです。DEFAULTのリスト・パーティションを別のリスト・パーティションとマージすると、結果のパーティションはDEFAULTパーティションになり、DEFAULT値が含まれます。

  • コンポジット・レンジ・パーティションまたはコンポジット・リスト・パーティション、レンジ-リストまたはリスト-リスト・コンポジット・パーティションをマージする場合、サブパーティションの定義は指定できません。サブパーティション化情報は、サブパーティション・テンプレートから取得できます。サブパーティションのテンプレートが指定されていない場合は、1つのMAXVALUEサブパーティションがレンジ・サブパーティションから、または1つのDEFAULTサブパーティションがリスト・サブパーティションから作成されます。

新しいパーティションに対して明示的に指定しなかった属性は、表レベルのデフォルトから継承されます。ただし、新しいパーティションに対してパーティション名を再利用すると、表レベルのデフォルト値ではなく、名前が再利用されたパーティションの値が新しいパーティションに継承されます。

選択したパーティションに対応するローカル索引パーティションは削除され、マージされたパーティションに対応するローカル索引パーティションにUNUSABLEのマークが付けられます。ヒープ構成表のすべてのグローバル索引にも、UNUSABLEのマークが付けられます。update_index_clausesを使用し、操作中にこれらすべての索引を更新できます。

tableが参照パーティション表の親表の場合は、dependent_tables_clauseを使用して、この文に指定するパーティション・メンテナンス操作を参照パーティション表のすべての子表に伝播できます。

ONLINE

パーティションのマージ操作中に表パーティションに対するDML操作を許可するには、ONLINEを指定します。

表パーティションのマージの制限事項

tableが索引構成表の場合や、ローカル・ドメイン索引がtableに定義されている場合は、一度にマージできるパーティションは2つのみになります。

merge_table_subpartitions

merge_table_subpartitions句を使用すると、tableの2つ以上のレンジ・サブパーティションまたはリスト・サブパーティションの内容を1つの新しいサブパーティションにマージして、元のサブパーティションを削除できます。この句はハッシュ・サブパーティションでは無効です。かわりに、coalesce_hash_subpartition句を使用してください。

マージする2つ以上のレンジ・サブパーティション、またはリスト・サブパーティションのカンマ区切りリストを指定します。TO句を使用すると、マージする2つ以上の隣接しているレンジ・サブパーティションを指定できます。

各サブパーティションに、subpartitionを使用してサブパーティション名を指定するか、またはFOR句を使用して名前なしでサブパーティションを指定します。FOR句の詳細は、「パーティション表と索引の参照」を参照してください。

マージされるサブパーティションは、同じパーティションに属している必要があります。レンジ・サブパーティションである場合は、隣接している必要があります。リスト・サブパーティションである場合は、隣接している必要はありません。マージの結果生成されるサブパーティション内のデータは、マージされたサブパーティションのデータが結合されたものです。

INTO句を指定する場合、range_subpartition_descまたはlist_subpartition_descで、それぞれrange_values_clauseまたはlist_values_clauseを指定することはできません。また、partitioning_storage_clauseに指定できる句は、TABLESPACEおよびtable_compressionのみです。

新しいサブパーティションに対して明示的に指定しなかった属性は、パーティション・レベルの値から継承されます。ただし、新しいサブパーティションに対してサブパーティション名を再利用すると、パーティション・レベルのデフォルト値ではなく、名前が再利用されたサブパーティションの値が新しいサブパーティションに継承されます。

対応するローカル索引のサブパーティションがマージされ、結果として生成される索引サブパーティションにはUNUSABLEのマークが付けられます。また、ヒープ構成表のパーティション化されたグローバル索引とパーティション化されていないグローバル索引の両方に対して、UNUSABLEのマークが付けられます。update_index_clausesを使用すると、操作中にすべての索引を更新できます。

ONLINE

サブパーティションのマージ操作中に表サブパーティションに対するDML操作を許可するには、ONLINEを指定します。

表サブパーティションのマージの制限事項

tableが索引構成表の場合は、一度にマージできるサブパーティションは2つのみになります。

exchange_partition_subpart

EXCHANGE PARTITION句またはEXCHANGE SUBPARTITION句を使用すると、次のデータおよび索引セグメントを交換できます。

  • 1つの非パーティション表と、次のいずれかを交換できます。

    • 1つのレンジ・パーティション、リスト・パーティションまたはハッシュ・パーティション

    • 1つのレンジ・サブパーティション、リスト・サブパーティションまたはハッシュ・サブパーティション

  • 1つのレンジ・パーティション表とレンジ-レンジまたはリスト-レンジ・コンポジット・パーティション表パーティションのレンジ・サブパーティション

  • 1つのハッシュ・パーティション表とレンジ-ハッシュまたはリスト-ハッシュのコンポジット・パーティション表パーティションのハッシュ・サブパーティション

  • 1つのリスト・パーティション表とレンジ-リストまたはハッシュ-リストのコンポジット・パーティション表パーティションのリスト・サブパーティション

交換対象の表、パーティションおよびサブパーティションの構造は、パーティション・キーを含め常に同じである必要があります。リスト・パーティションとリスト・サブパーティションの場合、対応する値リストも一致している必要があります。

この句をトランスポータブル表領域とともに使用すると、高速データ・ロードが容易になります。

関連項目:

トランスポータブル表領域の詳細は、『Oracle Database管理者ガイド』を参照してください。

tableにLOB列がある場合、各LOB列のLOBデータ、およびLOB索引パーティション・セグメントまたはLOB索引サブパーティション・セグメントは、tableの対応するLOBデータおよびLOB索引セグメントと交換されます。

tableにネストした表の列が含まれる場合、そのような各列のネストした表パーティション・セグメントは、非パーティション表の対応するネストした表セグメントと交換されます。

tableにID列が格納されている場合、パーティションまたはサブパーティションが交換されることになります。その逆も同様になります。順序ジェネレータは、増加または減少になります。順序ジェネレータは交換されないため、tableとパーティションまたはサブパーティションは、同じ順序ジェネレータを引き続き使用することになります。両方の順序ジェネレータの最高水位標は、新しいID列の値が既存の値と競合しないようにが調整されます。

2つのオブジェクトのすべてのセグメント属性(表領域およびロギングを含む)も交換されます。

パーティション表に交換される表の既存の統計情報は、交換されます。ただし、パーティション化された表のグローバル統計は変更されません。DBMS_STATS.GATHER_TABLE_STATSプロシージャを使用すると、グローバル統計を再作成できます。GRANULARITY属性をAPPROX_GLOBAL AND PARTITIONと同じに設定して、処理速度を上げ、既存のパーティション統計に基づいて新しいグローバル統計情報を集計できます。このパッケージ・プロシージャの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

交換されるオブジェクトのすべてのグローバル索引は、無効になります。update_global_index_clauseまたはupdate_all_indexes_clauseを使用し、パーティションが交換された表のグローバル索引を更新できます。update_all_indexes_clauseには、副次句ではなくUPDATE INDEXESキーワードのみを指定できます。交換される表のグローバル索引は、無効のままになります。update_global_index_clauseおよびupdate_all_indexes_clauseは、交換操作中にローカル索引を更新しません。INCLUDING | EXCLUDING INDEXES句を使用して、ローカル索引メンテナンスを指定できます。これらの句とともにparallel_clauseを指定すると、交換操作ではなく、索引の更新がパラレル化されます。

WITH TABLE

パーティションまたはサブパーティションを交換するtableを指定します。schemaを指定しない場合、そのtableは自分のスキーマ内にあるとみなされます。

INCLUDING | EXCLUDING INDEXES

INCLUDING INDEXESを指定すると、ローカル索引パーティションまたはサブパーティションを対応する表索引(非パーティション表の場合)またはローカル索引(ハッシュ・パーティション表の場合)と交換できます。EXCLUDING INDEXESを指定すると、交換された表のすべての標準索引、索引パーティションおよびパーティションに対応するすべての索引パーティションまたはサブパーティションにUNUSABLEのマークを付けることができます。この句を指定しない場合、EXCLUDING INDEXESがデフォルトになります。

WITH | WITHOUT VALIDATION

WITH VALIDATIONを指定すると、交換された表にあるいずれかの行が交換されたパーティションまたはサブパーティションにマップされない場合にエラーが戻されます。WITHOUT VALIDATIONを指定すると、交換された表にある行が正しくマップされたかどうかがチェックされません。この句を指定しない場合、WITH VALIDATIONがデフォルトになります。

exceptions_clause

この句の詳細は、「制約の例外の処理」を参照してください。パーティション交換のコンテキストでは、この句は、パーティション表がUNIQUE制約を使用して定義されている場合にのみ有効です。また、制約はDISABLE VALIDATEの状態である必要があります。この句は、サブパーティションではなくパーティション交換に対してのみ有効です。

CASCADE

CASCADEを指定すると、tableに含まれるすべての子の参照パーティション表の対応するパーティションまたはサブパーティションを交換できます。参照パーティション表の階層は、ソースとターゲットで一致している必要があります。

CASCADEの制限事項

CASCADE句には、次の制限事項が適用されます。

  • 参照パーティション表階層の親キーが、複数のパーティション化の制約で参照されている場合、CASCADEは指定できません。

  • tableの参照パーティション子表でドメイン索引またはXMLIndex索引が定義されている場合、CASCADEは指定できません。

関連項目:

パーティションおよびサブパーティションの交換の注意事項

パーティションおよびサブパーティションの交換時には、次の注意事項が適用されます。

  • 交換される両方の表は同じ主キーを含む必要があり、参照表が空でないかぎり、どちらの表も有効な外部キーを参照できません。

  • パーティション化された索引構成表の交換時には、次の点に注意します。

    • ソースおよびターゲットの表およびパーティションは、その主キーが同じ列に同じ順序で設定されている必要があります。

    • 接頭辞圧縮が使用可能な場合は、ソースおよびターゲットの両方で使用可能で、接頭辞の長さは同じである必要があります。

    • ソースおよびターゲットの両方は、索引構成されている必要があります。

    • ソースおよびターゲットの両方に、オーバーフロー・セグメントが必要です。または、ソースおよびターゲットの両方がオーバーフロー・セグメントを持ってはいけません。また、ソースおよびターゲットの両方ともマッピング表を含むか、または両方とも含まない必要があります。

    • ソースおよびターゲットの両方は、LOB列に対して記憶域属性が同一である必要があります。

dependent_tables_clause

この句は、参照パーティション表の親表を変更する場合にのみ有効です。この句では、親表の子の参照パーティション表の操作によって作成されるパーティションの属性を指定できます。

  • 親表がコンポジット・パーティションではない場合、1つ以上の子表を指定し、子表ごとに、親表内に作成された各パーティションの1つのpartition_specを指定します。

  • 親表がコンポジットの場合、1つ以上の子表を指定し、子表ごとに、親表内に作成された各サブパーティションの1つのpartition_specを指定します。

関連項目:

参照パーティション表の作成の詳細は、「CREATE TABLE」の句reference_partitioning」を参照してください。参照によるパーティション化の概要は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

UNUSABLE LOCAL INDEXES句

この2つの句を使用すると、パーティションとサブパーティションのどちらを変更するかに応じて、partitionに対応するローカル索引パーティションおよび索引サブパーティションの属性を変更できます。

  • UNUSABLE LOCAL INDEXESを指定すると、partitionに関連付けられたローカル索引パーティションまたは索引サブパーティションに、UNUSABLEのマークが付けられます。

  • REBUILD UNUSABLE LOCAL INDEXESを指定すると、partitionに関連付けられたUNUSABLEのローカル索引パーティションまたは索引サブパーティションが再構築されます。

UNUSABLE LOCAL INDEXESの制限事項

この句には、次の制限事項があります。

  • この句をmodify_table_partitionの他の句と同時に指定することはできません。

  • サブパーティションが含まれるパーティションに対しては、modify_table_partitionでこの句を指定できません。ただし、modify_table_subpartition句では指定できます。

update_index_clauses

update_index_clausesを使用すると、表のパーティション化操作の一部としてtableの索引を更新できます。表パーティションでDDL文を実行する場合、tableに索引が定義されていると、DDL文を実行中のパーティションだけでなく索引全体が無効になります。この句を使用すると、変更する索引パーティションをDDL操作中に更新できるため、DDL文の後で索引を再構築する必要がなくなります。

パーティション化された索引構成表では、update_index_clausesは不要であり、無効です。索引構成表は主キー・ベースであるため、値を変更せずにデータを移動する操作では、グローバル索引はUSABLEのままです。

update_global_index_clause

この句を指定すると、tableのグローバル索引のみを更新できます。tableのすべてのローカル索引には、UNUSABLEのマークが付けられます。

UPDATE GLOBAL INDEXES

UPDATE GLOBAL INDEXESを指定すると、tableで定義したグローバル索引を更新できます。

グローバル索引の更新の制限事項

グローバル索引がLOB列のグローバル・ドメイン索引として定義されている場合、ドメイン索引は、更新されるのではなくUNUSABLEのマークが付けられます。

INVALIDATE GLOBAL INDEXES

INVALIDATE GLOBAL INDEXESを指定すると、tableで定義したグローバル索引を無効にできます。

どちらも指定しない場合、グローバル索引は無効になります。

グローバル索引の無効化の制限事項

この句は、グローバル索引でのみサポートされます。索引構成表に対してはサポートされません。また、この句によって更新されるのは、USABLEおよびVALIDの索引のみです。UNUSABLEの索引は使用禁止のままになり、INVALIDのグローバル索引は無視されます。

update_all_indexes_clause

この句を使用すると、tableのすべての索引を更新できます。

update_index_partition

この句は、表パーティションに対する操作でのみ有効で、ローカル索引のみに影響します。

  • index_partition_descriptionを使用すると、各ローカル索引のそれぞれのパーティションの物理属性、表領域の記憶域およびロギングを指定できます。PARTITIONキーワードのみを指定すると、索引のパーティションは次のように更新されます。

    • 単一の表パーティションに対する操作(MOVE PARTITIONSPLIT PARTITIONなど)の場合、対応する索引パーティションは処理された索引表パーティションの属性を継承します。索引パーティションの名前は生成されないため、この操作によって作成された新しい索引パーティションは、対応する新しい表パーティションから名前を継承します。

    • MERGE PARTITION操作の場合、この操作によって作成されたローカル索引パーティションは、作成された表パーティションの名前とローカル索引の属性を継承します。

    ドメイン索引の場合、PARAMETERS句を使用すると、未解析のまま適切なODCI索引タイプ・ルーチンに渡すパラメータ文字列を指定できます。PARAMETERS句は、ドメイン索引に対してのみ有効であり、ドメイン索引について指定できるindex_partition_descriptionの唯一の部分です。

    関連項目:

    ドメイン索引の詳細は、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。

  • コンポジット・パーティション索引の場合、index_subpartition_clauseを使用すると、各サブパーティションに対して表領域の記憶域を指定できます。update_index_partition句のこのコンポーネントの詳細は、「CREATE INDEX」のindex_subpartition_clause」を参照してください。

USABLEキーワードとUNUSABLEキーワードの詳細は、ALTER INDEX ... USABLE | UNUSABLEを参照してください。

update_index_subpartition

この句は、コンポジット・パーティション表のサブパーティションに対する操作でのみ有効で、コンポジット・パーティション表のローカル索引のみに影響します。1つ以上のサブパーティションに対して、格納する表領域を指定できます。

すべての索引の更新の制限事項

update_all_indexes_clauseには、次の制限事項が適用されます。

  • この句は、索引構成表に対して指定できません。

  • exchange_partition_subpart句を使用してパーティションまたはサブパーティションを交換する場合、update_all_indexes_clauseは、グローバル索引にのみ適用可能です。このため、update_index_partitionまたはupdate_index_subpartition句を指定できません。ただし、INCLUDING | EXCLUDING INDEXES句を使用して、交換操作中にローカル索引メンテナンスを指定できます。

parallel_clause

parallel_clauseを使用すると、表の問合せおよびDMLに対するデフォルトの並列度を変更できます。

この句の詳細は、「CREATE TABLE」のparallel_clause」を参照してください。

表のパラレル化の変更の制限事項

パラレル化の変更には、次の制限事項があります。

  • tableにLOB型またはユーザー定義オブジェクト型の列が含まれている場合、このtableでのINSERTUPDATEおよびDELETEは、通知なしに逐次実行されます。ただし、後続の問合せはパラレルで実行されます。

  • parallel_clausemove_table_clauseと組み合せて指定する場合、このパラレル化は移動のみに適用され、後続の表でのDML操作および問合せには適用されません。

filter_condition

この句を使用すると、表のパーティションまたはサブパーティションの移動、分割またはマージ、表の移動または非パーティション表のパーティション表への変換の各ALTER TABLE操作の実行中に保持する行を指定できます。データベースでは、where_clauseで指定された条件を満たす行のみが保持されます。この句のセマンティクスの詳細は、「SELECT」の「where_clause」を参照してください。

フィルタ条件の制限事項

filter_condition句には、次の制限事項が適用されます。

  • フィルタ条件は、ヒープ構成表でのみサポートされます。

  • フィルタ条件が参照できるのは、変更される表の列のみです。フィルタ条件に、結合や副問合せなど、他のデータベース・オブジェクトを参照する操作を含めることはできません。

オンライン操作でのフィルタ条件の使用の制限事項および注意事項

オンラインALTER TABLE操作のフィルタ条件の指定時には、次の制限事項および注意事項が適用されます。

  • サプリメンタル・ロギングが有効になっている場合は、filter_condition句およびONLINE句の両方を指定することはできません。

  • filter_condition句およびONLINE句の両方を指定すると、ALTER TABLE操作の実行中に表に対するDML操作が許可されます。フィルタ条件による、同時DML操作に対する直接の影響はありません。ただし、フィルタ操作とDML操作は意図せずに次のような競合を引き起こす可能性があるため、この組合せは慎重に使用してください。

    • 非パーティション表への挿入は成功します。パーティション表への挿入は、この操作がパーティション化キー基準に違反しない場合は成功します。

    • 削除操作は、ALTER TABLE操作の間、フィルタ条件により保持対象となる行に対してのみ適用されます。

    • 更新操作は、ALTER TABLE操作の間、フィルタ条件により保持対象となる行に対してのみ適用されます。これらの更新操作は、更新操作によって、フィルタ条件により保持対象となる行が対象外になるかどうかにかかわらず、成功します。

    • ALTER TABLE操作の開始時にフィルタ条件による保持対象ではなかった行は、更新操作によってその行が保持対象になるかどうかにかかわらず、保持されません。

allow_disallow_clustering

この句は、属性クラスタリングを使用する表に有効です。move_table_clauseで指定された表の移動操作とcoalesce_table_[sub]partitionmerge_table_[sub]partitionsmove_table_[sub]partitionおよびsplit_table_[sub]partition句で指定された表のパーティションおよびサブパーティション・メンテナンス操作中に発生するデータ移動の属性クラスタリングを許可または禁止できます。

  • ALLOW CLUSTERINGを指定して、データ移動の属性クラスタリングを許可します。この句は、表を作成または変更したDDLのNO ON DATA MOVEMENT設定をオーバーライドします。

  • DISALLOW CLUSTERINGを指定して、データ移動の属性クラスタリングを禁止します。この句は、表を作成または変更したDDLのYES ON DATA MOVEMENT設定をオーバーライドします。

属性クラスタリングを使用しない表に指定する場合、allow_disallow_clustering句は影響しません。

関連項目:

NO ON DATA MOVEMENTおよびYES ON DATA MOVEMENT句の詳細は、CREATE TABLEclustering_when句を参照してください。

{ DEFERRED | IMMEDIATE } INVALIDATION

この句を使用すると、データベースで表パーティションのメンテナンス操作の実行中に、依存カーソルが無効化されるタイミングを制御できます。

  • DEFERRED INVALIDATIONを指定した場合、データベースでは可能な場合、依存カーソルの無効化を回避または遅延します。

  • IMMEDIATE INVALIDATIONを指定した場合、データベースでは、Oracle Database 12cリリース1 (12.1)以前のリリースでの動作と同様に、依存カーソルを即時に無効にします。これはデフォルトです。

この句を省略した場合、いつカーソルが無効になるかは、CURSOR_INVALIDATION初期化パラメータの値によって決定されます。

この句を指定できるのは、表パーティションのメンテナンス操作を実行する場合のみで、その他のALTER TABLE操作に対してはサポートされません。

関連項目:

move_table_clause

move_table_clauseを使用すると、非パーティション表のデータまたはパーティション表のパーティションのデータを新しいセグメントに再配置できます。オプションとして、別の表領域への配置および記憶域属性の変更を行うこともできます。

LOB_storage_clause句およびvarray_col_properties句を使用して、表またはパーティションに関連付けられたLOBデータ・セグメントを移動することもできます。この句で指定していないLOB項目は移動できません。

表を別の表領域に移動する場合、COMPATIBLEパラメータが10.0以上に設定されていると、ネストした表の列に対する記憶表は、その表が作成された表領域に残ります。COMPATIBLEが10.0未満に設定されている場合、表と記憶表は新しい表領域に自動的に移動します。

ONLINE句

ONLINEを指定すると、表の移動中に、表に対してDML操作を実行できます。

表のオンライン化の制限事項

表のオンライン化には、次の制限事項があります。

  • 同じ文でこの句と他の句は結合できません。

  • この句は、パーティション化された索引構成表に対して指定できません。

  • この句は、表でドメイン索引が定義されている場合は指定できません。

  • パラレルDMLおよびダイレクト・パスINSERT操作は、表に対する排他的ロックを必要とします。したがって、ロックが競合するため、これらの操作は実行中のオンライン表MOVEと同時にサポートされません。

  • LOB、VARRAY、Oracleが提供する型またはユーザー定義オブジェクト型の列が含まれている索引構成表には、この句は指定できません。

index_org_table_clause

索引構成表の場合は、move_table_clauseindex_org_table_clauseを使用するとオーバーフロー・セグメント属性も指定できます。move_table_clauseを指定すると、索引構成表の主キー索引が再構築されます。オーバーフロー・データ・セグメントは、OVERFLOWキーワードが明示的に指定されていないかぎり、再構築されません。ただし、次の場合は例外です。

  • ALTER TABLE文の一部としてPCTTHRESHOLDの値またはINCLUDING列を変更する場合は、オーバーフロー・データ・セグメントが再構築されます。

  • 索引構成表内の表外列(LOB列、VARRAY列、ネストした表の列)のいずれかを明示的に移動する場合は、オーバーフロー・データ・セグメントも再構築されます。

LOB列の索引およびデータ・セグメントは、LOB列をALTER TABLE文の一部として明示的に指定しないかぎり、再構築されません。

mapping_table_clause

MAPPING TABLEを指定すると、マッピング表がまだ存在しない場合、Oracle Databaseによりマッピング表が作成されます。マッピング表がすでに存在する場合、マッピング表は索引構成表とともに移動され、すべてのビットマップ索引にはUNUSABLEのマークが付けられます。新しいマッピング表は、親表と同じ表領域に作成されます。

NOMAPPINGを指定すると、既存のマッピング表が削除されます。

この句の詳細は、「CREATE TABLE」のmapping_table_clauses」を参照してください。

マッピング表の制限事項

tableでビットマップ索引が定義されている場合は、NOMAPPINGを指定できません。

prefix_compression

prefix_compression句を使用すると、索引構成表の接頭辞圧縮を有効または無効にできます。

  • COMPRESSを指定すると、接頭辞圧縮が使用可能になり、その結果、索引構成表における主キー列の値が重複しなくなります。integerを使用して、接頭辞の長さ(圧縮する接頭辞列数)を指定します。

    接頭辞の長さの有効範囲は、1から(主キー列数-1)までです。デフォルトでは(主キー列数-1)になります。

  • NOCOMPRESSを指定すると、索引構成表での接頭辞圧縮が使用禁止になります。これはデフォルトです。

TABLESPACE tablespace

再構築した索引構成表を格納する表領域を指定します。

LOB_storage_clause

この句を使用すると、別の表領域にLOBセグメントを移動できます。表にLONG列が含まれている場合は、この句を使用してLOBセグメントを移動することはできません。かわりに、LONG列をLOBに変換するか、または表をエクスポートし、LOB列に必要な表領域の記憶域を指定する表を再作成して表データを再インポートする必要があります。

UPDATE INDEXES

この句は、ヒープ構成表のオンラインまたはオフライン移動の実行時にのみ有効です。これを使用して、表のすべてのグローバル索引を更新できます。

オプションで、索引または索引パーティションの表領域を次のように変更できます。

  • segment_attributes_clauseを指定すると、非パーティション・グローバル索引の表領域を変更できます。この句内で指定できるのはTABLESPACE句のみです。

  • update_index_partition句を指定すると、パーティション・グローバル索引のパーティションの表領域を変更できます。この句内で指定できるのは、segment_attributes_clauseTABLESPACE句のみです。

表の移動の制限事項

表の移動には、次の制限事項があります。

  • MOVEを指定する場合は、ALTER TABLE文の最初の句にする必要があります。この句以外では、physical_attributes_clauseparallel_clauseおよびLOB_storage_clauseのみが指定できます。

  • LONGまたはLONG RAW列を含む表は、移動できません。

  • パーティション表(ヒープ表または索引構成表)全体の移動はできません。個々のパーティションまたはサブパーティションを移動してください。

注意:

move_table_clauseで指定するすべてのLOB列については、次のことに注意してください。

  • 新しい表領域が指定されていない場合でも、古いLOBデータ・セグメントとこれに対応する索引セグメントは削除され、新しいセグメントが作成されます。

  • tableのLOB索引がそのLOBデータと異なる表領域にある場合、移動後のLOB索引は、LOBデータと同じ表領域にまとめて格納されます。

関連項目:

「move_table_partition」および「move_table_subpartition」を参照してください。

modify_to_partitioned

非パーティション表またはパーティション表(索引、オンライン表、オフライン表など)をパーティション化するには、この句を使用します。

非パーティション表またはパーティション表は、次の特性がある任意のタイプのパーティション表またはコンポジット・パーティション表に変更できます。

  • 元の表内のすべてのデータが保持されます。

  • table_partitioning_clausesで特に指定しないかぎり、変更した表の新規作成したパーティションまたはサブパーティション内のデータは、元の表と同じ表領域に格納されます。

  • table_partitioning_clausesで特に指定しないかぎり、変更した表の、ローカル索引パーティションまたはサブパーティション、およびLOBパーティションまたはサブパーティションは、表パーティションまたはサブパーティションと同じ場所に配置されます。

  • 元の表で定義されているすべてのトリガー、制約およびVPDポリシーが保持されます。

  • 元の非パーティション表で表圧縮が定義されている場合は、パーティション表でも同じタイプの表圧縮が使用されます。

  • パーティション表を変更する場合、新規作成するパーティションまたはサブパーティションの圧縮設定は、すべてのパーティションまたはサブパーティションで同じ圧縮方法が共有されていないかぎり、変更前のパーティション表のデフォルトの圧縮設定から導出されます。

modify_to_partitioned句で指定された、文字データ型のレンジ、リストまたはハッシュ・パーティション化キー列またはサブパーティション化キー列のそれぞれに、BINARYUSING_NLS_COMPUSING_NLS_SORTまたはUSING_NLS_SORT_CSのいずれかの宣言された照合が必要です。

table_partitioning_clauses

この句を使用すると、表のパーティション化属性を指定できます。

modify_to_partitioned句で指定された、文字データ型のレンジ、リストまたはハッシュ・パーティション化キー列またはサブパーティション化キー列のそれぞれに、BINARYUSING_NLS_COMPUSING_NLS_SORTまたはUSING_NLS_SORT_CSのいずれかの宣言された照合が必要です。

この句のセマンティクスは、CREATE TABLE文と同じです。この句のセマンティクスの詳細は、「CREATE TABLE」の「table_partitioning_clauses」を参照してください。

ONLINE

ONLINEを指定すると、パーティション表の変更中に、表に対するDML操作が許可されるようになります。

UPDATE INDEXES

この句を使用すると、表の既存の索引が、グローバル・パーティション索引またはローカル・パーティション索引にどのように変換されるかを指定できます。

  • indexには、表の既存の索引の名前を指定します。

  • local_partitioned_index句を指定すると、indexをローカル・パーティション索引に変換できます。この句のセマンティクスは、CREATE INDEX文と同じです。この句のセマンティクスの詳細は、「CREATE INDEX」の句「local_partitioned_index」を参照してください。

  • global_partitioned_index句を指定すると、indexをグローバル・パーティション索引に変換できます。この句のセマンティクスは、CREATE INDEX文と同じです。この句のセマンティクスの詳細は、「CREATE INDEX」の句「global_partitioned_index」を参照してください。

  • GLOBALキーワードを指定すると、同一キーのパーティション・グローバル索引および非パーティション・グローバル索引がグローバル形状を保持できるようになります。この句は、それらの索引がローカル・パーティション索引に変換されないようにします。非同一グローバル索引には効果がありません。

UPDATE INDEXESキーワードのみを指定した場合、またはUPDATE INDEXES句をすべて省略した場合は、既存の索引は次のように変換されます。

  • 非同一キー索引は元の形状を保持します。通常の索引は非パーティション・グローバル索引に変換され、非パーティション・グローバル索引は変化せず、パーティション・グローバル索引は変化せずにそのパーティション形状を保持します。

  • 同一キー索引はローカル・パーティション索引に変換されます。同一キー索引の索引定義にはパーティション化キーが含まれていますが、索引定義にはパーティション化キーのみが含まれているわけではありません。

  • ビットマップ索引は、同一キー索引であるかどうかにかかわらず、ローカル・パーティション索引に変換されます。

パーティション表からパーティション表への変換のデフォルトの索引規則

パーティション表からパーティション表へのデフォルトの索引変換について設定されている規則は、非パーティション表からパーティション表への変換と同じですが、パーティション表の既存のローカル索引に対する追加の処理があります。

  • 索引がすでにローカルである場合には、パーティション化ディメンションの両側で索引列が同一キーであれば、索引はローカル索引のままになります。

  • パーティション化列がキー列のサブセット(つまり、同一キー)である場合は、グローバル索引がローカルに変換されます。グローバル索引が同一キー索引でない場合は、グローバル索引の形状が保持されます。

非パーティション表のパーティション表への変更の制限事項

modify_to_partitioned句には、次の制限事項が適用されます。

  • この句は、索引構成表に対しては指定できません。

  • この句は、表でドメイン索引が定義されている場合は指定できません。

  • 非パーティション表を参照パーティション表の子表に変更するときには、ONLINEを指定できません。この操作は、オフライン・モードでのみサポートされます。

関連項目:

非パーティション表のパーティション表への変換の詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

modify_opaque_type

modify_opaque_type句を使用すると、指定した抽象データ型またはXMLTypeをアンパック記憶域を使用してANYDATA列に格納するようにデータベースに指示できます。

この句には、任意の抽象データ型を指定できます。ただし、従来型の記憶域を使用することではANYDATA列に格納できない、次のデータ型を指定できることが主な利点になります。

  • XMLType

  • XMLType型、CLOB型、BLOB,型、またはNCLOB型の1つ以上の属性を含む抽象データ型。

アンパック記憶域を使用すると、データ型は、ANYDATA列に関連付けられたシステム生成の非表示列に格納されます。これらのデータ型は、従来型記憶域を使用してANYDATA列に格納されたデータ型と同じように挿入および問合せできます。

anydata_column

ANYDATA型の列の名前を指定します。type_nameが、XMLType型、CLOB型、BLOB型、またはNCLOB型の属性を含まない抽象データ型の場合、anydata_columnは空にする必要があります。

type_name

1つ以上の抽象データ型またはXMLTypeの名前を指定します。この抽象データ型には、XMLType型、CLOB型、BLOB型、またはNCLOB型の属性を含めることができます。この型は、EDITIONABLEにすることができます。これらのデータ型を、その後でanydata_columnに挿入すると、そのデータ型はアンパック記憶域を使用するようになります。この句を以前に同一のanydata_columnに指定していた場合、以前に指定したデータ型と新しく指定したデータ型に、アンパック記憶域が引き続き使用されます。

enable_disable_clause

enable_disable_clauseを使用すると、Oracle Databaseが整合性制約を適用するかどうか、およびその方法を指定できます。DROPおよびKEEP句は、一意制約または主キー制約を使用禁止にする場合のみに有効です。

関連項目:

  • この文に関する注意事項および制限事項を含むこの句の詳細は、「CREATE TABLE」の「enable_disable_clause」を参照してください。

TABLE LOCK

DDL操作中にロックされた表にのみDDL操作を実行できます。このような表ロックは、DML操作中は必要ありません。

注意:

一時表に表ロックを適用することはできません。

  • ENABLE TABLE LOCKを指定すると、表ロックが有効になり、表に対するDDL操作が実行可能になります。現在実行中のすべてのトランザクションは、表ロックが有効になる前にコミットまたはロールバックする必要があります。

    注意:

    Oracle Databaseは、表をロックする前に、データベース内のアクティブなDMLトランザクションが完了するまで待機します。その結果、遅延が生じる可能性があることに注意してください。

  • DISABLE TABLE LOCKを指定すると、表ロックが無効になり、表に対するDDL操作が実行できなくなります。

    注意:

    ターゲット表の表ロックが使用禁止の場合、パラレルDML操作は実行されません。

ALL TRIGGERS

ALL TRIGGERS句を使用すると、表に関連するすべてのトリガーを有効または無効にできます。

  • ENABLE ALL TRIGGERSを指定すると、表に関連するすべてのトリガーが使用可能になります。トリガー条件が満たされた場合に、トリガーが起動されます。

    1つのトリガーを使用可能にする場合は、ALTER TRIGGERenable_clauseを使用してください。

    関連項目:

    「CREATE TRIGGER」「ALTER TRIGGER」および「トリガーの有効化: 例」を参照してください。

  • DISABLE ALL TRIGGERSを指定すると、表に関連するすべてのトリガーが使用禁止になります。トリガー条件が満たされた場合でも、使用禁止のトリガーは起動されません。

CONTAINER_MAP

CONTAINER_MAP句を使用すると、コンテナ・マップを使用した表の問合せを有効または無効にできます。

  • ENABLE CONTAINER_MAPを指定して、コンテナ・マップを使用した表の問合せを有効化します。

  • DISABLE CONTAINER_MAPを指定して、コンテナ・マップを使用した表の問合せを無効化します。

CONTAINERS_DEFAULT

CONTAINERS_DEFAULT句を使用して、CONTAINERS句に対して表を有効化または無効化します。

  • ENABLE CONTAINERS_DEFAULTを指定して、CONTAINERS句に対して表を有効化します。

  • DISABLE CONTAINERS_DEFAULTを指定して、CONTAINERS句に対して表を無効化します。

表への制約の追加: 例

次の文は、データを操作するために新しい表を作成して、新しく作成された表に情報を表示します。

CREATE TABLE JOBS_Temp AS SELECT * FROM HR.JOBS;

SELECT * FROM JOBS_Temp WHERE MIN_SALARY < 3000;

JOB_ID	   JOB_TITLE			       MIN_SALARY MAX_SALARY
---------- ----------------------------------- ---------- ----------
PU_CLERK   Purchasing Clerk			     2500	5500
ST_CLERK   Stock Clerk				     2008	5000
SH_CLERK   Shipping Clerk			     2500	5500

次の文は、列値をより高い値に更新します。

UPDATE JOBS_Temp SET MIN_SALARY = 2300 WHERE MIN_SALARY < 2010;

次の文は、制約を追加します

ALTER TABLE JOBS_Temp ADD CONSTRAINT chk_sal_min CHECK (MIN_SALARY >=2010);

次の文は、表の情報を表示します。

SELECT * FROM JOBS_Temp WHERE MIN_SALARY < 3000;

JOB_ID	   JOB_TITLE			       MIN_SALARY MAX_SALARY
---------- ----------------------------------- ---------- ----------
PU_CLERK   Purchasing Clerk			     2500	5500
ST_CLERK   Stock Clerk				     2300	5000
SH_CLERK   Shipping Clerk			     2500	5500

次の文は、制約を表示します。

SELECT CONSTRAINT_NAME FROM USER_CONSTRAINTS WHERE TABLE_NAME='JOBS_TEMP';

CONSTRAINT_NAME
--------------------------------------------------------------------------------
SYS_C008830
CHK_SAL_MIN

Live SQL:

Oracle Live SQLの「Adding Constraints to Tables」で関連する例を参照して実行してください

コレクションの取出し: 例

次の文は、サンプル表sh.print_mediaのネストした表の列ad_textdocs_ntabを変更し、問合せ時にロケータのかわりに実値を戻します。

ALTER TABLE print_media MODIFY NESTED TABLE ad_textdocs_ntab
   RETURN AS VALUE; 

パラレル処理の指定: 例

次の文は、サンプル表oe.customersに対する問合せのパラレル処理を指定します。

ALTER TABLE customers
   PARALLEL;

制約状態の変更: 例

次の文は、employees表のemp_manager_fkという名前の整合性制約をENABLE VALIDATE状態にします。

ALTER TABLE employees
   ENABLE VALIDATE CONSTRAINT emp_manager_fk
   EXCEPTIONS INTO exceptions;

Oracle Databaseが制約を使用可能にするためには、employees表の各行がこの制約を満たしている必要があります。制約に違反する行があれば、制約は使用禁止のままになります。すべての例外は、exceptions表に記述されます。次の文で、employees表の例外を検出することもできます。

SELECT e.*
   FROM employees e, exceptions ex
   WHERE e.rowid = ex.row_id
      AND ex.table_name = 'EMPLOYEES'
      AND ex.constraint = 'EMP_MANAGER_FK';

次の文は、employees表の2つの制約をENABLE NOVALIDATE状態にします。

ALTER TABLE employees
   ENABLE NOVALIDATE PRIMARY KEY
   ENABLE NOVALIDATE CONSTRAINT emp_last_name_nn;

この文には、次の2つのENABLE句が含まれています。

  • 1番目のENABLE句は、表の主キー制約をENABLE NOVALIDATE状態にします。

  • 2番目のENABLE句は、emp_last_name_nnという制約をENABLE NOVALIDATE状態にします。

この例では、表のそれぞれの行が2つの制約を満たす場合にかぎり、その制約が使用可能になります。どちらかの制約に違反する行があった場合、エラーが戻され、どちらの制約も使用禁止のままになります。

departments表のlocation_id列の外部キー制約について考えます。ここでは、locations表の主キーを参照しています。次の文は、locations表の主キーを使用禁止にします。

ALTER TABLE locations
   MODIFY PRIMARY KEY DISABLE CASCADE;

locations表の一意キーは、departments表の外部キーによって参照されるため、この主キーを使用禁止にする場合は、CASCADE句を指定します。この句によって、外部キーも使用禁止になります。

索引構成表の例外表の作成: 例

次の例では、索引構成表hr.countriesの行のうち、主キー制約に違反する行を格納するexcept_table表を作成します。

EXECUTE DBMS_IOT.BUILD_EXCEPTIONS_TABLE ('hr', 'countries', 'except_table');
ALTER TABLE countries
   ENABLE PRIMARY KEY
   EXCEPTIONS INTO except_table;

例外表を指定する場合は、この表に行を挿入する権限が必要です。検出された例外を調べる場合、例外表を問い合せる権限が必要です。

関連項目:

表に行を挿入するために必要な権限の詳細は、「INSERT」および「SELECT」を参照してください。

CHECK制約の無効化: 例

次の文は、employees表でCHECK制約を定義して無効にします。

ALTER TABLE employees ADD CONSTRAINT check_comp 
   CHECK (salary + (commission_pct*salary) <= 5000)
   DISABLE;

check_comp制約は、給与総額が$5000を超える従業員がいないことを保証します。ただし、この制約が使用禁止になっているため、従業員の給与をこの制限以上に増やすことができます。

トリガーの有効化: 例

次の文は、employees表に関連付けられているすべてのトリガーを有効にします。

ALTER TABLE employees
   ENABLE ALL TRIGGERS;

未使用領域の割当て解除: 例

次の文は、employees表で再利用できるように最高水位標がMINEXTENTSを超えるすべての未使用領域を解放します。

ALTER TABLE employees
    DEALLOCATE UNUSED;

詳細な大/小文字の区別に関する列の照合の変更: 例

この例では、大/小文字を区別しないように列を変更する方法を示しています。まず、次のようにstudents表を作成し、データを移入します。

CREATE TABLE students (last_name VARCHAR2(20), id NUMBER);

INSERT INTO students VALUES('Dodd', 364);
INSERT INTO students VALUES('de Niro', 132);
INSERT INTO students VALUES('Vogel', 837);
INSERT INTO students VALUES('van der Kamp', 549);
INSERT INTO students VALUES('van Der Meer', 624);

次の文は、列last_nameをアルファベット順に戻します。結果では大/小文字が区別されることに注意してください。小文字は大文字より後に示されています。

SELECT last_name, id
  FROM students
  ORDER BY last_name;

LAST_NAME                    ID
-------------------- ----------
Dodd                        364
Vogel                       837
de Niro                     132
van Der Meer                624
van der Kamp                549

次の文は、列last_nameのデータ・バインドされた照合を、大/小文字が区別されない照合BINARY_CIに変更します。

ALTER TABLE students 
  MODIFY (last_name COLLATE BINARY_CI);

次の文も、列last_nameをアルファベット順に戻します。今回は、結果で大/小文字が区別されないことに注意してください。

SELECT last_name, id
  FROM students
  ORDER BY last_name;

LAST_NAME                    ID
-------------------- ----------
de Niro                     132
Dodd                        364
van der Kamp                549
van Der Meer                624
Vogel                       837

列名の変更: 例

次の例では、サンプル表oe.customersの列名をcredit_limitからcredit_amountに変更します。

ALTER TABLE customers
   RENAME COLUMN credit_limit TO credit_amount;

列の削除: 例

次の文は、CASCADE CONSTRAINTSが指定されているdrop_column_clauseです。表t1が次のように作成されているとします。

CREATE TABLE t1 (
   pk NUMBER PRIMARY KEY,
   fk NUMBER,
   c1 NUMBER,
   c2 NUMBER,
   CONSTRAINT ri FOREIGN KEY (fk) REFERENCES t1,
   CONSTRAINT ck1 CHECK (pk > 0 and c1 > 0),
   CONSTRAINT ck2 CHECK (c2 > 0)
);

次の文に対してエラーが戻されます。

/* The next two statements return errors:
ALTER TABLE t1 DROP (pk);  -- pk is a parent key
ALTER TABLE t1 DROP (c1);  -- c1 is referenced by multicolumn
                           -- constraint ck1

次の文を発行すると、列pk、主キー制約、外部キー制約riおよびCHECK制約ck1が削除されます。

ALTER TABLE t1 DROP (pk) CASCADE CONSTRAINTS;

削除される列に対して定義されている制約で参照されている列も、すべて削除される場合は、CASCADE CONSTRAINTSは必要ありません。たとえば、列pkを他の表から参照する参照制約が他に存在しない場合は、次の文を指定するときにCASCADE CONSTRAINTS句がなくてもエラーにはなりません。

ALTER TABLE t1 DROP (pk, fk, c1);

未使用の列の削除: 例

次の文は、データを操作するために新しい表を作成して、新しく作成された表に情報を表示します。

CREATE TABLE JOBS_Temp AS SELECT * FROM HR.JOBS;

SELECT * FROM JOBS_Temp WHERE MAX_SALARY > 20000;

JOB_ID	   JOB_TITLE			       MIN_SALARY MAX_SALARY
---------- ----------------------------------- ---------- ----------
AD_PRES    President				    20080      40000
AD_VP	   Administration Vice President	    15000      30000
SA_MAN	   Sales Manager			    10000      20080

次の文は、2つの新しい列を追加します。

ALTER TABLE JOBS_Temp ADD (DUMMY1 NUMBER(2), DUMMY2 NUMBER(2));

次の文は、新しく追加された列に値を挿入します。

INSERT INTO JOBS_Temp(JOB_ID, JOB_TITLE, DUMMY1, DUMMY2) VALUES ('D','DUMMY',10,20);

INSERT INTO JOBS_Temp(JOB_ID, JOB_TITLE, DUMMY1, DUMMY2) VALUES ('D','DUMMY',10,20)

次の文は、新しく追加された列を未使用に設定します。

ALTER TABLE JOBS_TEMP SET UNUSED (DUMMY1, DUMMY2);

次の文は、未使用の列数を表示します。

SELECT * FROM USER_UNUSED_COL_TABS WHERE TABLE_NAME='JOBS_TEMP';

TABLE_NAM      COUNT
--------- ----------
JOBS_TEMP	   2

次の文は、未使用の列を削除します。

ALTER TABLE JOBS_TEMP DROP UNUSED COLUMNS;

次の文は、表の情報を表示します。

SELECT * FROM JOBS_TEMP;

JOB_ID	   JOB_TITLE			       MIN_SALARY MAX_SALARY
---------- ----------------------------------- ---------- ----------
AD_PRES    President				    20080      40000
AD_VP	   Administration Vice President	    15000      30000
AD_ASST    Administration Assistant		     3000	6000
FI_MGR	   Finance Manager			     8200      16000
FI_ACCOUNT Accountant				     4200	9000
AC_MGR	   Accounting Manager			     8200      16000
AC_ACCOUNT Public Accountant			     4200	9000
SA_MAN	   Sales Manager			    10000      20080
SA_REP	   Sales Representative 		     6000      12008
PU_MAN	   Purchasing Manager			     8000      15000
PU_CLERK   Purchasing Clerk			     2500	5500
ST_MAN	   Stock Manager			     5500	8500
ST_CLERK   Stock Clerk				     2008	5000
SH_CLERK   Shipping Clerk			     2500	5500
IT_PROG    Programmer				     4000      10000
MK_MAN	   Marketing Manager			     9000      15000
MK_REP	   Marketing Representative		     4000	9000
HR_REP	   Human Resources Representative	     4000	9000
PR_REP	   Public Relations Representative	     4500      10500
D	   DUMMY
D	   DUMMY

Live SQL:

Oracle Live SQLの「Dropping Unused Columns」で関連する例を参照して実行してください

索引構成表の変更: 例

次の文は、hr.countriesに基づく索引構成表countries_demoの索引セグメントのINITRANSパラメータを変更します。

ALTER TABLE countries_demo INITRANS 4;

次の文は、オーバーフロー・データ・セグメントを索引構成表countriesに追加します。

ALTER TABLE countries_demo ADD OVERFLOW;

次の文は、索引構成表countriesのオーバーフロー・データ・セグメントのINITRANSパラメータを変更します。

ALTER TABLE countries_demo OVERFLOW INITRANS 4;

表パーティションの分割: 例

次の文は、サンプル表sh.salesの古いパーティションsales_q4_2000を分割して2つの新しいパーティションを作成し、1つにはsales_q4_2000bという名前を付け、もう1つには旧パーティションの名前を再利用します。

ALTER TABLE sales SPLIT PARTITION SALES_Q4_2000 
   AT (TO_DATE('15-NOV-2000','DD-MON-YYYY'))
   INTO (PARTITION SALES_Q4_2000, PARTITION SALES_Q4_2000b);

次の文では、元のパーティションsales_q1_2002を、新しい3つのパーティションsales_jan_2002sales_feb_2002、およびsales_mar_2002に分割します。

ALTER TABLE sales SPLIT PARTITION SALES_Q1_2002 INTO (
 PARTITION SALES_JAN_2002 VALUES LESS THAN (TO_DATE('01-FEB-2002','DD-MON-YYYY')),
 PARTITION SALES_FEB_2002 VALUES LESS THAN (TO_DATE('01-MAR-2002','DD-MON-YYYY')),
 PARTITION SALES_MAR_2002);

次の文は、pm.print_media表のパーティション・バージョンを作成します。print_media表のLONG列はLOBに変換されています。表は、「Oracle Managed Filesの作成: 例」で作成された表領域に格納されます。ad_textdocs_ntab列およびad_header列の基礎となるオブジェクト型は、pmサンプル・スキーマを作成するスクリプトで作成されます。

CREATE TABLE print_media_part (
    product_id NUMBER(6),
    ad_id              NUMBER(6),
    ad_composite       BLOB,
    ad_sourcetext      CLOB,
    ad_finaltext       CLOB,
    ad_fltextn         NCLOB,
    ad_textdocs_ntab   TEXTDOC_TAB,
    ad_photo           BLOB,
    ad_graphic         BFILE,
    ad_header          ADHEADER_TYP)
  NESTED TABLE ad_textdocs_ntab STORE AS textdoc_nt
  PARTITION BY RANGE (product_id)
    (PARTITION p1 VALUES LESS THAN (100),
     PARTITION p2 VALUES LESS THAN (200));

次の文は、表のパーティションp2をパーティションp2ap2bに分割します。

ALTER TABLE print_media_part
   SPLIT PARTITION p2 AT (150) INTO
   (PARTITION p2a TABLESPACE omf_ts1
      LOB (ad_photo, ad_composite) STORE AS (TABLESPACE omf_ts2),
   PARTITION p2b 
      LOB (ad_photo, ad_composite) STORE AS (TABLESPACE omf_ts2))
   NESTED TABLE ad_textdocs_ntab INTO (PARTITION nt_p2a, PARTITION nt_p2b);

p2ap2bのパーティションでは、列ad_photoad_compositeに対するLOBセグメントが表領域omf_ts2内に作成されます。パーティションp2aのその他の列に対するLOBセグメントは、表領域omf_ts1に保存されます。パーティションp2bのその他の列に対するLOBセグメントは、このALTER文の実行前の表領域で保持されます。ただし、LOBデータおよびLOB索引セグメントが新しい表領域に移動されない場合でも、これらの新しいセグメントが作成されます。

また、ネストした表の列ad_textdocs_ntabに対する新しいセグメントも作成されます。これらの新しいセグメントの記憶表は、nt_p2aおよびnt_p2bです。

2つの表パーティションのマージ: 例

次の文は、「表パーティションの分割: 例」で作成されたパーティションをマージして1つのパーティションに戻します。

ALTER TABLE sales 
   MERGE PARTITIONS sales_q4_2000, sales_q4_2000b
   INTO PARTITION sales_q4_2000;

次の文は、「表のパーティションの分割: 例」の例と逆の操作を実行します。

ALTER TABLE print_media_part 
   MERGE PARTITIONS p2a, p2b INTO PARTITION p2ab TABLESPACE example
   NESTED TABLE ad_textdocs_ntab STORE AS nt_p2ab;

隣接する4つのレンジ・パーティションのマージ例

次の文では、隣接する4つのレンジ・パーティションsales_q1_2000sales_q2_2000sales_q3_2000、およびsales_q4_2000を、1つのパーティションsales_all_2000にマージします。

ALTER TABLE sales
  MERGE PARTITIONS sales_q1_2000 TO sales_q4_2000
  INTO PARTITION sales_all_2000;

LOBおよびネストした表の記憶域を持つ表パーティションの追加: 例

次の文は、パーティションp3print_media_part表に追加し(前述の例を参照)、その表のBLOBCLOBおよびネストした表の列の記憶特性を指定します。

ALTER TABLE print_media_part ADD PARTITION p3 VALUES LESS THAN (400)
  LOB(ad_photo, ad_composite) STORE AS (TABLESPACE omf_ts1)
  LOB(ad_sourcetext, ad_finaltext) STORE AS (TABLESPACE omf_ts2)
  NESTED TABLE ad_textdocs_ntab STORE AS nt_p3;

パーティションp3の列ad_photoおよびad_compositeに対するLOBデータとLOB索引セグメントは、表領域omf_ts1に格納されます。LOB列の他の属性は、まず表レベルのデフォルトから継承され、次に表領域のデフォルトから継承されます。

ad_source_textおよびad_finaltextのLOBデータ・セグメントは、omf_ts2表領域に格納され、他のすべての属性は、まず表レベルのデフォルト値から継承され、次に表領域のデフォルト値から継承されます。

実表のパーティションp3に対応する、ネストした表の記憶列ad_textdocs_ntabの記憶表のパーティションの名前はnt_p3になり、他のすべての属性は、まず表レベルのデフォルト値から継承され、次に表領域のデフォルト値から継承されます。

表への複数パーティションの追加: 例

次の文は、「表パーティションの分割: 例」で作成された表print_media_partに3つのパーティションを追加します。

ALTER TABLE print_media_part ADD
  PARTITION p3 values less than (300),
  PARTITION p4 values less than (400),
  PARTITION p5 values less than (500);

デフォルト・リスト・パーティションの使用: 例

次の文は、「リスト・パーティション化の例」で作成されたリスト・パーティション表を使用します。最初の文は、既存のデフォルト・パーティションを新規のsouthパーティションとデフォルト・パーティションに分割します。

ALTER TABLE list_customers SPLIT PARTITION rest 
   VALUES ('MEXICO', 'COLOMBIA')
   INTO (PARTITION south, PARTITION rest);

次の文は、結果のデフォルト・パーティションをasiaパーティションとマージします。

ALTER TABLE list_customers 
   MERGE PARTITIONS asia, rest INTO PARTITION rest;

次の文は、デフォルト・パーティションを分割して、asiaパーティションを再作成します。

ALTER TABLE list_customers SPLIT PARTITION rest 
   VALUES ('CHINA', 'THAILAND')
   INTO (PARTITION asia, PARTITION rest);

表パーティションの削除: 例

次の文は、パーティションp3 (「LOBおよびネストした表の記憶域を持つ表パーティションの追加: 例」で作成)を削除します。

ALTER TABLE print_media_part DROP PARTITION p3;

表パーティションの交換例:

この例では、「リスト・パーティション化の例」で作成したlist_customers表のパーティションと同じ構造を持つexchange_table表を作成します。次に、表list_customersのパーティションrestを表exchange_tableに置き換えますが、ローカル索引パーティションと対応するexchange_tableの索引との交換は行わず、exchange_table内のデータがパーティションrestの範囲内にあるかどうかの検証も行いません。

CREATE TABLE exchange_table (
   customer_id     NUMBER(6),
   cust_first_name VARCHAR2(20),
   cust_last_name  VARCHAR2(20),
   cust_address    CUST_ADDRESS_TYP,
   nls_territory   VARCHAR2(30),
   cust_email      VARCHAR2(40));

ALTER TABLE list_customers 
   EXCHANGE PARTITION rest WITH TABLE exchange_table 
   WITHOUT VALIDATION;

表パーティションの変更: 例

次の文は、list_customers表のパーティションasiaに対応するすべてのローカル索引パーティションに、UNUSABLEのマークを付けます。

ALTER TABLE list_customers MODIFY PARTITION asia 
   UNUSABLE LOCAL INDEXES;

次の文は、UNUSABLEのマークが付けられたすべてのローカル索引パーティションを再構築します。

ALTER TABLE list_customers MODIFY PARTITION asia
   REBUILD UNUSABLE LOCAL INDEXES;

表パーティションの移動: 例

次の文は、パーティションp2b (「表パーティションの分割: 例」で作成)を表領域omf_ts1に移動します。

ALTER TABLE print_media_part 
   MOVE PARTITION p2b TABLESPACE omf_ts1;

表パーティション名の変更: 例

次の文は、sh.sales表のパーティション名を変更します。

ALTER TABLE sales RENAME PARTITION sales_q4_2003 TO sales_currentq;

表パーティションの切捨て: 例

次の文は、「LOB列のあるパーティション表の例」で作成したprint_media_demo表を使用します。p1パーティション内のデータがすべて削除され、解放された領域の割当てが解除されます。

ALTER TABLE print_media_demo
   TRUNCATE PARTITION p1 DROP STORAGE;

グローバル索引の更新: 例

次の文は、サンプル表sh.salesのパーティションsales_q1_2000を分割し、定義されているグローバル索引を更新します。

ALTER TABLE sales SPLIT PARTITION sales_q1_2000
   AT (TO_DATE('16-FEB-2000','DD-MON-YYYY'))
   INTO (PARTITION q1a_2000, PARTITION q1b_2000)
   UPDATE GLOBAL INDEXES;

パーティション索引の更新: 例

次の文は、サンプル表sh.costsのパーティションcosts_Q4_2003を分割し、定義されているローカル索引を更新します。使用される表領域は、「基本的な表領域の作成: 例」で作成されたものです。

CREATE INDEX cost_ix ON costs(channel_id) LOCAL;

ALTER TABLE costs
  SPLIT PARTITION costs_q4_2003 at
    (TO_DATE('01-Nov-2003','dd-mon-yyyy')) 
    INTO (PARTITION c_p1, PARTITION c_p2) 
  UPDATE INDEXES (cost_ix (PARTITION c_p1 tablespace tbs_02, 
                           PARTITION c_p2 tablespace tbs_03));

オブジェクト識別子の指定: 例

次の文は、オブジェクト型、主キーに基づくオブジェクト識別子に対応するオブジェクト表、およびユーザー定義REF列を持つ表を作成します。

CREATE TYPE emp_t AS OBJECT (empno NUMBER, address CHAR(30));

CREATE TABLE emp OF emp_t (
   empno PRIMARY KEY)
   OBJECT IDENTIFIER IS PRIMARY KEY;

CREATE TABLE dept (dno NUMBER, mgr_ref REF emp_t SCOPE is emp);

次の文は、emp表を参照する制約およびユーザー定義REF列を追加します。

ALTER TABLE dept ADD CONSTRAINT mgr_cons FOREIGN KEY (mgr_ref)
   REFERENCES emp;
ALTER TABLE dept ADD sr_mgr REF emp_t REFERENCES emp;

表の列の追加: 例

次の文は、NUMBERデータ型の列duty_pct、サイズが3のVARCHAR2データ型の列visa_neededおよびCHECK整合性制約をcountries表に追加します。

ALTER TABLE countries 
   ADD (duty_pct     NUMBER(2,2)  CHECK (duty_pct < 10.5),
        visa_needed  VARCHAR2(3)); 

仮想表の列の追加: 例

次の文は、hr.employees表のコピーにincomeという列(給与と歩合の合計)を追加します。給与と歩合はどちらもNUMBER型の列であるため、文の中でデータ型が指定されていなくても、仮想列はNUMBER型の列として作成されます。

CREATE TABLE emp2 AS SELECT * FROM employees;

ALTER TABLE emp2 ADD (income AS (salary + (salary*commission_pct)));

表の列の変更: 例

次の文は、duty_pct列のサイズを増大させます。

ALTER TABLE countries
   MODIFY (duty_pct NUMBER(3,2)); 

MODIFY句には列の定義が1つのため、定義を囲むカッコは任意指定です。

次の文は、employees表のPCTFREEパラメータとPCTUSEDパラメータの値を、それぞれ30と60に変更します。

ALTER TABLE employees 
   PCTFREE 30
   PCTUSED 60; 

表の記憶域属性の変更

次の文は、既存のJOBS表を使用して、JOBS_TEMPという名前の表を作成します。

CREATE TABLE JOBS_TEMP AS SELECT * FROM HR.JOBS;

次の文は、USER_TABLES表で記憶域パラメータを問い合せます。

SELECT initial_extent, 
       next_extent, 
       min_extents, 
       max_extents, 
       pct_increase, 
       blocks, 
       sample_size 
FROM   user_tables 
WHERE  table_name = 'JOBS_TEMP';

INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS PCT_INCREASE     BLOCKS SAMPLE_SIZE
-------------- ----------- ----------- ----------- ------------ ---------- -----------
         65536     1048576           1  2147483645                       1          19

次の文は、新しい記憶域パラメータを使用してJOBS_TEMP表を変更します。

ALTER TABLE JOBS_TEMP MOVE    
      STORAGE ( INITIAL 20K    
                NEXT 40K    
                MINEXTENTS 2    
                MAXEXTENTS 20    
                PCTINCREASE 0 )    
      TABLESPACE USERS;

次の文は、USER_TABLES表で新しい記憶域パラメータを問い合せます。

SELECT initial_extent, 
       next_extent, 
       min_extents, 
       max_extents, 
       pct_increase, 
       blocks, 
       sample_size 
FROM   user_tables 
WHERE  table_name = 'JOBS_TEMP';

INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS PCT_INCREASE     BLOCKS SAMPLE_SIZE
-------------- ----------- ----------- ----------- ------------ ---------- -----------
         65536       40960           1  2147483645                       1          19

Live SQL:

表の記憶域属性の変更で、Oracle Live SQLに関連する例を参照および実行します。

表の列の追加、変更、名前変更および削除: 例

次の文は、データを操作するために新しい表を作成して、新しく作成された表に情報を表示します。

CREATE TABLE JOBS_Temp AS SELECT * FROM HR.JOBS;

SELECT * FROM JOBS_Temp WHERE MAX_SALARY > 30000;

JOB_ID	   JOB_TITLE			       MIN_SALARY MAX_SALARY
---------- ----------------------------------- ---------- ----------
AD_PRES    President				    20080      40000

次の文は、既存の列定義を変更します。

ALTER TABLE JOBS_Temp MODIFY(JOB_TITLE VARCHAR2(100));

次の文は、表に2つの新しい列を追加します。

ALTER TABLE JOBS_Temp ADD (BONUS NUMBER (7,2), COMM NUMBER (5,2), DUMMY NUMBER(2));

次の文は、新しく追加された列を表示します。

SELECT JOB_ID, BONUS, COMM, DUMMY FROM JOBS_Temp WHERE MAX_SALARY > 20000;

JOB_ID		BONUS	    COMM      DUMMY
---------- ---------- ---------- ----------
AD_PRES
AD_VP
SA_MAN

次の文は、既存の列の名前を変更し、変更された列を表示します。

ALTER TABLE JOBS_Temp RENAME COLUMN COMM TO COMMISSION;

SELECT JOB_ID, COMMISSION FROM JOBS_Temp WHERE MAX_SALARY > 20000;

JOB_ID	   COMMISSION
---------- ----------
AD_PRES
AD_VP
SA_MAN

次の文は、表から単一の列を削除します。

ALTER TABLE JOBS_Temp DROP COLUMN DUMMY;

次の文は、表から複数の列を削除します。

ALTER TABLE JOBS_Temp DROP (BONUS, COMMISSION);

Live SQL:

Oracle Live SQLの「Modifying Table Columns」で関連する例を参照して実行してください

データの暗号化: 例

次の文は、暗号化アルゴリズムAES256を使用して、hr.employees表のsalary列を暗号化します。前述の「セマンティクス」で説明したように、まず、透過的データ暗号化を有効にする必要があります。

ALTER TABLE employees
   MODIFY (salary ENCRYPT USING 'AES256' 'NOMAC');

次の文は、デフォルトの暗号化アルゴリズムAES192を使用して、暗号化された新しい列online_acct_pwoe.customers表に追加します。NO SALTを指定すると、Bツリー索引をこの列に対して作成できるようになります。

ALTER TABLE customers
   ADD (online_acct_pw VARCHAR2(8) ENCRYPT 'NOMAC' NO SALT);

次の例は、customer.online_acct_pw列を復号化します。

ALTER TABLE customers
   MODIFY (online_acct_pw DECRYPT);

エクステントの割当て: 例

次の文は、employees表に5KBのエクステントを割り当て、そのエクステントをインスタンス4が使用できるようにします。

ALTER TABLE employees
  ALLOCATE EXTENT (SIZE 5K INSTANCE 4); 

この文には、DATAFILEパラメータが指定されていないため、エクステントは表が入っている表領域に属するデータファイルの1つに割り当てられます。

デフォルト列値の指定: 例

次の文は、product_information表のmin_price列のデフォルト値を10に変更します。

ALTER TABLE product_information
  MODIFY (min_price DEFAULT 10); 

続いてmin_price列に値を指定せずに、product_information表に新しい行を追加する場合、min_price列の値は自動的に10(ゼロ)になります。

INSERT INTO product_information (product_id, product_name, 
   list_price)
   VALUES (300, 'left-handed mouse', 40.50); 

SELECT product_id, product_name, list_price, min_price 
    FROM product_information
    WHERE product_id = 300; 

PRODUCT_ID PRODUCT_NAME         LIST_PRICE  MIN_PRICE
---------- -------------------- ---------- ----------
       300 left-handed mouse          40.5         10

以前に指定したデフォルト値を中止して、新しく追加する行にその値が自動的に挿入されないようにする場合、次の文に示すように、デフォルト値をNULLに置き換えます。

ALTER TABLE product_information
   MODIFY (min_price DEFAULT NULL);

MODIFY句で指定する必要があるのは、列名と、定義のうち変更される部分のみです(列の定義をすべて指定する必要はありません)。この文は、既存の行の既存の値には影響しません。

次の例では、DEFAULT ON NULLで定義した列を表に追加します。DEFAULTの列値には、順序疑似列NEXTVALが含まれます。

次に示すように、順序s1と表t1を作成します。

CREATE SEQUENCE s1 START WITH 1;

CREATE TABLE t1 (name VARCHAR2(10));
INSERT INTO t1 VALUES('Kevin');
INSERT INTO t1 VALUES('Julia');
INSERT INTO t1 VALUES('Ryan');

idを追加します。この列のデフォルトは、s1.NEXTVALに設定されます。idのデフォルトの列値は、表内に既存の各行に割り当てられます。s1.NEXTVALが各行に割り当てられる順序は、非決定的になります。

ALTER TABLE t1 ADD (id NUMBER DEFAULT ON NULL s1.NEXTVAL NOT NULL);

SELECT id, name FROM t1 ORDER BY id;

        ID NAME
---------- ----------
         1 Kevin
         2 Julia
         3 Ryan

それ以降に新しい行を表に追加して、id列にNULL値を指定すると、DEFAULT ON NULL式のs1.NEXTVALが挿入されます。

INSERT INTO t1(id, name) VALUES(NULL, 'Sean');

SELECT id, name FROM t1 ORDER BY id;

        ID NAME
---------- ----------
         1 Kevin
         2 Julia
         3 Ryan
         4 Sean

XMLType表への制約の追加: 例

次の例では、xwarehouses表(「XMLTypeの例」で作成)に主キー制約を追加します。

ALTER TABLE xwarehouses 
   ADD (PRIMARY KEY(XMLDATA."WarehouseID"));

この疑似列の詳細は、「XMLDATA疑似列」を参照してください。

制約名の変更: 例

次の文は、サンプル表oe.customersの制約名をcust_fname_nnからcust_firstname_nnに変更します。

ALTER TABLE customers RENAME CONSTRAINT cust_fname_nn
   TO cust_firstname_nn;

制約の削除: 例

次の文は、departments表の主キーを削除します。

ALTER TABLE departments 
    DROP PRIMARY KEY CASCADE; 

PRIMARY KEY制約の名前がpk_deptであることがわかっている場合は、次のように指定しても削除できます。

ALTER TABLE departments
    DROP CONSTRAINT pk_dept CASCADE; 

CASCADE句によって、主キーを参照するすべての外部キーが削除されます。

次の文は、employees表のemail列の一意キーを削除します。

ALTER TABLE employees 
    DROP UNIQUE (email); 

この文のDROP句ではCASCADE句を省略します。CASCADEオプションを省略することによって、一意キーを参照する外部キーがある場合、その一意キーは削除されません。

LOB列: 例

次の文は、CLOB列であるresumeemployee表に追加し、この新しい列のLOB記憶特性を指定します。

ALTER TABLE employees ADD (resume CLOB)
  LOB (resume) STORE AS resume_seg (TABLESPACE example);

次の文は、キャッシュを使用できるようにLOB列のresumeを変更します。

ALTER TABLE employees MODIFY LOB (resume) (CACHE); 

次の文は、SecureFiles CLOB column resume to the employee表に追加し、この新しい列のLOB記憶特性を指定します。SecureFiles LOBを格納する表領域に対しては、自動セグメント領域管理が行われている必要があります。したがって、この例のLOBデータは、auto_seg_ts表領域(「表領域に対するセグメント領域管理の指定: 例」で作成)に格納されます。

ALTER TABLE employees ADD (resume CLOB)
LOB (resume) STORE AS SECUREFILE resume_seg (TABLESPACE auto_seg_ts);

次の文は、LOB列のresumeをキャッシュを使用しないように変更します。

ALTER TABLE employees MODIFY LOB (resume) (NOCACHE);

ネストした表: 例

次の文は、ネストした表の列skillsemployee表に追加します。

ALTER TABLE employees ADD (skills skill_table_type)
    NESTED TABLE skills STORE AS nested_skill_table;

また、ネストした表の記憶特性も変更できます。変更する場合、nested_table_col_propertiesに指定した記憶表の名前を使用してください。記憶表では、問合せまたはDML文を実行することはできません。記憶表は、ネストした表の列の記憶特性を変更するためにのみ使用します。

次の文は、ネストした表の列clientと記憶表client_tabを使用して、表vet_serviceを作成します。ネストした表client_tabを変更して制約を指定します。

CREATE TYPE pet_t AS OBJECT
   (pet_id NUMBER, pet_name VARCHAR2(10), pet_dob DATE);
/

CREATE TYPE pet AS TABLE OF pet_t;
/

CREATE TABLE vet_service (vet_name VARCHAR2(30),
                          client   pet)
  NESTED TABLE client STORE AS client_tab;

ALTER TABLE client_tab ADD UNIQUE (pet_id);

次の文は、REF値のネストした表用の記憶表を変更して、REFの範囲が限定されることを指定します。

CREATE TYPE emp_t AS OBJECT (eno number, ename char(31)); 
CREATE TYPE emps_t AS TABLE OF REF emp_t; 
CREATE TABLE emptab OF emp_t; 
CREATE TABLE dept (dno NUMBER, employees emps_t) 
   NESTED TABLE employees STORE AS deptemps; 
ALTER TABLE deptemps ADD (SCOPE FOR (COLUMN_VALUE) IS emptab); 

同様に、次の文は、REFをROWIDとともに格納することを指定します。

ALTER TABLE deptemps ADD (REF(column_value) WITH ROWID); 

これらのALTER TABLE文を正確に実行するためには、記憶表deptempsが空である必要があります。また、ネストした表は、スカラー値(REF値)の表として定義されるため、Oracle Databaseは、暗黙的に列名COLUMN_VALUEを記憶表に設定します。

関連項目:

REF列: 例

次の文は、オブジェクト型dept_tを作成し、表staffを作成します。

CREATE TYPE dept_t AS OBJECT 
   (deptno NUMBER, dname VARCHAR2(20));
/

CREATE TABLE staff 
   (name   VARCHAR2(100), 
    salary NUMBER,
    dept   REF dept_t); 

オブジェクト表officesを次のように作成します。

CREATE TABLE offices OF dept_t; 

dept列は、任意の表に格納されたdept_tのオブジェクトに参照を格納できます。次のようにdept列に有効範囲制約を追加することによって、departments表に格納されたオブジェクトのみが参照されるように制限できます。

ALTER TABLE staff 
    ADD (SCOPE FOR (dept) IS offices); 

前述のALTER TABLE文は、staff表が空である場合のみ正常に実行されます。

次の文は、staffdept列にREF値を格納する際、ROWIDも同時に格納します。

ALTER TABLE staff 
   ADD (REF(dept) WITH ROWID);

ANYDATA列のアンパック記憶域の例:

この例では、ANYDATAの列を含む表を作成し、アンパック記憶域を使用してOPAQUEデータ型をANYDATAの列に格納してから、そのデータ型を問い合せます。この例では、データベースにユーザーhrとして接続していると仮定しています。

t1を作成します。この表は、NUMBERの列nと、ANYDATAの列xを格納します。

CREATE TABLE t1 (n NUMBER, x ANYDATA);

CLOB属性を含む、オブジェクト・タイプclob_typを作成します。

CREATE OR REPLACE TYPE clob_typ AS OBJECT (c clob);
/

t1ANYDATAの列xに含まれるOPAQUEデータ型のXMLTypeclob_typのアンパック記憶域を有効にします。

ALTER TABLE t1 MODIFY OPAQUE TYPE x STORE (XMLType, clob_typ) UNPACKED;

XMLTypeオブジェクトとclob_typオブジェクトを、表t1に挿入します。これらの型は、アンパック記憶域を使用するようになります。

INSERT INTO t1
  VALUES(1, anydata.convertobject(XMLType('<Test>This is test XML</Test>')));

INSERT INTO t1
  VALUES(2, anydata.convertobject(clob_typ(TO_CLOB('This is a test CLOB'))));

t1を問い合せて、ANYDATAの列xに格納されたタイプの名前を確認します。

SELECT t1.*, anydata.getTypeName(t1.x) typename FROM t1;

    N X()                  TYPENAME
----- -------------------- --------------------
    1 ANYDATA()            SYS.XMLTYPE
    2 ANYDATA()            HR.CLOB_TYP

XMLTypeデータ型とclob_typデータ型に格納された値を問い合せることができる、ファンクションを作成します。

CREATE FUNCTION get_xmltype (ad IN ANYDATA) RETURN VARCHAR2 AS
      rtn_val PLS_INTEGER;
      my_xmltype XMLType;
      string_val VARCHAR2(30);
   BEGIN
      rtn_val := ad.getObject(my_xmltype);
      string_val := my_xmltype.getstringval();
      return (string_val);
   END;
/

CREATE FUNCTION get_clob_typ (ad IN ANYDATA) RETURN VARCHAR2 AS
      rtn_val PLS_INTEGER;
      my_clob_typ clob_typ;
      string_val VARCHAR2(30);
   BEGIN
      rtn_val := ad.getObject(my_clob_typ);
      string_val := (my_clob_typ.c);
      return (string_val);
   END;
/

t1を問い合せて、ANYDATAの列xの各データ型に格納された値を確認します。

SELECT t1.*, anydata.getTypeName(t1.x) typename,
  CASE
    WHEN anydata.gettypename(t1.x) = 'SYS.XMLTYPE' THEN get_xmltype(t1.x)
    WHEN anydata.gettypename(t1.x) = 'HR.CLOB_TYP' THEN get_clob_typ(t1.x)
  END string_value
FROM t1;

    N X()                  TYPENAME             STRING_VALUE
----- -------------------- -------------------- ------------------------------
    1 ANYDATA()            SYS.XMLTYPE          <Test>This is test XML</Test>
    2 ANYDATA()            HR.CLOB_TYP          This is a test CLOB

その他の例

ALTER TABLE文を使用して整合性制約を定義する例は、「constraint」を参照してください。

表の記憶域パラメータの変更例は、「storage_clause」を参照してください。