ヘッダーをスキップ
Oracle® Database SQL言語リファレンス
12cリリース1 (12.1)
B71278-02
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

CREATE TABLE

用途

CREATE TABLE文を使用すると、次の型の表を作成できます。

  • リレーショナル表。ユーザー・データを格納する基本構造です。

  • オブジェクト表。列の定義にオブジェクト型を使用する表です。特定の型のオブジェクト・インスタンスを格納するように明示的に定義されます。

オブジェクト型を作成しておき、リレーショナル表の作成時に列の中でそのオブジェクト型を使用することもできます。

副問合せを指定しない場合、データを含まない表が作成されます。INSERT文を使用した場合、表に行を追加できます。表を作成した後、ALTER TABLE文でADD句を指定すると、追加する列、パーティションおよび整合性制約を定義できます。ALTER TABLE文でMODIFY句を指定すると、既存の列またはパーティションの定義を変更できます。


関連項目:

  • オブジェクトの作成の詳細は、『Oracle Database管理者ガイド』および「CREATE TYPE」を参照してください。

  • 表の変更および削除の詳細は、「ALTER TABLE」および「DROP TABLE」を参照してください。


前提条件

自分のスキーマ内にリレーショナル表を作成する場合は、CREATE TABLEシステム権限が必要です。他のユーザーのスキーマ内に表を作成する場合は、CREATE ANY TABLEシステム権限が必要です。また、表が含まれるスキーマの所有者は、表を格納するため表領域への割当て制限またはUNLIMITED TABLESPACEシステム権限が必要です。

これらの表権限に加え、オブジェクト表またはオブジェクト型の列が存在するリレーショナル表を作成する場合は、表の所有者に、表が参照するすべての型にアクセスするためのEXECUTEオブジェクト権限が付与されているかまたはEXECUTE ANY TYPEシステム権限が付与されている必要があります。これらの権限は、ロールを介して取得するのではなく、明示的に付与される必要があります。

さらに、表の所有者が表へのアクセス権限を他のユーザーに付与する場合、所有者には、参照する型に対するWITH GRANT OPTION付きのEXECUTEオブジェクト権限またはWITH ADMIN OPTION付きのEXECUTE ANY TYPEシステム権限が必要です。これらの権限を持っていない場合、表の所有者は、表へのアクセス権限を他のユーザーに付与できません。

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

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

外部表を作成する場合は、適切なオペレーティング・システム・ディレクトリに対する、オペレーティング・システムの読取り権限および書込み権限が必要です。外部データが存在するオペレーティング・システム・ディレクトリに対応するデータベース・ディレクトリ・オブジェクトに対するREADオブジェクト権限が必要です。また、opaque_format_specでログ・ファイルまたは不良ファイルを指定する場合、またはAS subquery句を指定してデータベース表から外部表にデータをアンロードする場合、ファイルが格納されるデータベース・ディレクトリに対するWRITEオブジェクト権限が必要です。

自分のスキーマ以外のデータベース・スキーマ内にXMLType表を作成する場合は、CREATE ANY TABLE権限のみでなく、CREATE ANY INDEX権限も必要です。これは、表の作成時にOBJECT_ID列に一意索引が作成されるためです。OBJECT_ID列には、システム生成オブジェクト識別子が格納されます。


関連項目:

  • 「CREATE INDEX」

  • 型を使用する表の作成に必要な権限については、『Oracle Database管理者ガイド』を参照してください。


構文

create_table::=

create_table.gifの説明が続きます。
create_table.gifの説明

(relational_table::=object_table ::=XMLType_table ::=を参照)

relational_table::=

relational_table.gifの説明が続きます。
relational_table.gifの説明


注意:

表名の後の各句は、任意のリレーショナル表に対して任意で指定します。ただし、すべての表に対して、relational_properties句を使用して列名およびデータ型を指定するか、またはtable_properties句を使用してAS subquery句を指定する必要があります。

(relational_properties::=physical_properties::=table_properties::=を参照)

object_table::=

object_table.gifの説明が続きます。
object_table.gifの説明

(object_table_substitution ::=object_properties::=oid_clause::=oid_index_clause::=physical_properties::=table_properties::=を参照)

XMLType_table::=

xmltype_table.gifの説明が続きます。
xmltype_table.gifの説明

(XMLType_storage::=XMLSchema_spec::=XMLType_virtual_columns::=oid_clause::=oid_index_clause::=physical_properties::=table_properties::=を参照)

relational_properties::=

relational_properties.gifの説明が続きます。
relational_properties.gifの説明


注意:

これらの句はどのような順序で指定してもかまいませんが、次の例外があります。period_definitionを指定する場合、その前に1つ以上のcolumn_definitionまたはvirtual_column_definitionを指定する必要があります。period_definitionは、1回のみ指定できます。

(column_definition::=virtual_column_definition ::=period_definition::=constraint::=supplemental_logging_props ::=を参照)

column_definition::=

column_definition.gifの説明が続きます。
column_definition.gifの説明

(identity_clause::=encryption_spec ::=constraint::=を参照)

identity_clause::=

identity_clause.gifの説明が続きます。
identity_clause.gifの画像の説明

identity_options::=

identity_options.gifの説明が続きます。
identity_options.gifの画像の説明

virtual_column_definition::=

virtual_column_definition.gifの説明が続きます。
virtual_column_definition.gifの説明

(evaluation_edition_clause::=unusable_editions_clause::=constraint::=を参照)

evaluation_edition_clause::=

evaluation_edition_clause.gifの説明が続きます。
evaluation_edition_clause.gifの説明

unusable_editions_clause::=

unusable_editions_clause.gifの説明が続きます。
unusable_editions_clause.gifの説明

period_definition::=

period_definition.gifの説明が続きます。
period_definition.gifの説明が続きます。

encryption_spec::=

encryption_spec.gifの説明が続きます。
encryption_spec.gifの説明

object_table_substitution::=

object_table_substitution.gifの説明が続きます。
object_table_substitution.gifの説明

object_properties::=

object_properties.gifの説明が続きます。
object_properties.gifの説明

(constraint::=supplemental_logging_props ::=を参照)

oid_clause::=

oid_clause.gifの説明が続きます。
oid_clause.gifの説明

oid_index_clause::=

oid_index_clause.gifの説明が続きます。
oid_index_clause.gifの説明

(physical_attributes_clause::=を参照)

physical_properties::=

physical_properties.gifの説明が続きます。
physical_properties.gifの説明

(deferred_segment_creation::=segment_attributes_clause ::=table_compression::=ilm_clause::=index_org_table_clause ::=external_table_clause ::=を参照)

deferred_segment_creation::=

deferred_segment_creation.gifの説明が続きます。
deferred_segment_creation.gifの説明

segment_attributes_clause::=

segment_attributes_clause.gifの説明が続きます。
segment_attributes_clause.gifの説明

(physical_attributes_clause ::=logging_clause::=を参照)

physical_attributes_clause::=

physical_attributes_clause.gifの説明が続きます。
physical_attributes_clause.gifの説明

(storage_clause::=を参照)

table_compression::=

table_compression.gifの説明が続きます。
table_compression.gifの説明

ilm_clause::=

ilm_clause.gifの説明が続きます。
ilm_clause.gifの説明

ilm_policy_clause::=

ilm_policy_clause.gifの説明が続きます。
ilm_policy_clause.gifの説明

(table_compression::=tiering_clause::=を参照)

tiering_clause::=

tiering_clause.gifの説明が続きます。
tiering_clause.gifの説明

table_properties::=

table_properties.gifの説明が続きます。
table_properties.gifの説明

(column_properties::=indexing_clause::=table_partitioning_clauses ::=parallel_clause ::=enable_disable_clause ::=row_movement_clause ::=flashback_archive_clause::=subquery::=を参照)

column_properties::=

column_properties.gifの説明が続きます。
column_properties.gifの説明

(object_type_col_properties::=nested_table_col_properties ::=varray_col_properties ::=LOB_storage_clause::=LOB_partition_storage::=XMLType_column_properties ::=を参照)

object_type_col_properties::=

object_type_col_properties.gifの説明が続きます。
object_type_col_properties.gifの説明

substitutable_column_clause::=

substitutable_column_clause.gifの説明が続きます。
substitutable_column_clause.gifの説明

nested_table_col_properties::=

nested_table_col_properties.gifの説明が続きます。
nested_table_col_properties.gifの説明

(substitutable_column_clause::=object_properties::=physical_properties::=column_properties::=を参照)

varray_col_properties::=

varray_col_properties.gifの説明が続きます。
varray_col_properties.gifの説明

(substitutable_column_clause::=varray_storage_clause::=を参照)

varray_storage_clause::=

varray_storage_clause.gifの説明が続きます。
varray_storage_clause.gifの説明

(LOB_parameters::=を参照)

LOB_storage_clause::=

lob_storage_clause.gifの説明が続きます。
lob_storage_clause.gifの説明

(LOB_storage_parameters::=を参照)

LOB_storage_parameters::=

lob_storage_parameters.gifの説明が続きます。
lob_storage_parameters.gifの説明

(LOB_parameters::=storage_clause::=を参照)

LOB_parameters::=

lob_parameters.gifの説明が続きます。
lob_parameters.gifの説明

(LOB_deduplicate_clause::=LOB_compression_clause::=encryption_spec::=logging_clause::=を参照)


注意:

LOB記憶域にSecureFilesを使用する場合、いくつかのLOBパラメータは不要になります。詳細は、LOB_storage_parametersを参照してください。

LOB_retention_clause::=

lob_retention_clause.gifの説明が続きます。
lob_retention_clause.gifの説明

LOB_deduplicate_clause::=

lob_deduplicate_clause.gifの説明が続きます。
lob_deduplicate_clause.gifの説明

LOB_compression_clause::=

lob_compression_clause.gifの説明が続きます。
lob_compression_clause.gifの説明

logging_clause::=

logging_clause.gifの説明が続きます。
logging_clause.gifの説明

LOB_partition_storage::=

lob_partition_storage.gifの説明が続きます。
lob_partition_storage.gifの説明

(LOB_storage_clause::=varray_col_properties::=LOB_partitioning_storage::=を参照)

LOB_partitioning_storage::=

lob_partitioning_storage.gifの説明が続きます。
lob_partitioning_storage.gifの説明

XMLType_column_properties::=

xmltype_column_properties.gifの説明が続きます。
xmltype_column_properties.gifの説明

(XMLType_storage::=XMLSchema_spec::=を参照)

XMLType_storage::=

xmltype_storage.gifの説明が続きます。
xmltype_storage.gifの説明

(LOB_parameters::=を参照)

XMLSchema_spec::=

xmlschema_spec.gifの説明が続きます。
xmlschema_spec.gifの説明

XMLType_virtual_columns::=

xmltype_virtual_columns.gifの説明が続きます。
xmltype_virtual_columns.gifの説明

row_movement_clause::=

row_movement_clause.gifの説明が続きます。
row_movement_clause.gifの説明

flashback_archive_clause::=

flashback_archive_clause.gifの説明が続きます。
flashback_archive_clause.gifの説明

index_org_table_clause::=

index_org_table_clause.gifの説明が続きます。
index_org_table_clause.gifの説明

(mapping_table_clauses::=key_compression ::=index_org_overflow_clause ::=を参照)

mapping_table_clauses::=

mapping_table_clauses.gifの説明が続きます。
mapping_table_clauses.gifの説明

key_compression::=

key_compression.gifの説明が続きます。
key_compression.gifの説明

index_org_overflow_clause::=

index_org_overflow_clause.gifの説明が続きます。
index_org_overflow_clause.gifの説明

(segment_attributes_clause::=を参照)

supplemental_logging_props::=

supplemental_logging_props.gifの説明が続きます。
supplemental_logging_props.gifの説明

supplemental_log_grp_clause::=

supplemental_log_grp_clause.gifの説明が続きます。
supplemental_log_grp_clause.gifの説明

supplemental_id_key_clause::=

supplemental_id_key_clause.gifの説明が続きます。
supplemental_id_key_clause.gifの説明

external_table_clause::=

external_table_clause.gifの説明が続きます。
external_table_clause.gifの説明

(external_data_properties::=を参照)

external_data_properties::=

external_data_properties.gifの説明が続きます。
external_data_properties.gifの説明

(opaque_format_spec: この句は、ORACLE_LOADERおよびORACLE_DATAPUMPアクセス・ドライバのすべてのアクセス・パラメータを指定します。これらのパラメータの詳細は、『Oracle Databaseユーティリティ』を参照してください。)

indexing_clause::=

indexing_clause.gifの説明が続きます。
indexing_clause.gifの説明

table_partitioning_clauses::=

table_partitioning_clauses.gifの説明が続きます。
table_partitioning_clauses.gifの説明

(range_partitions::=, hash_partitions ::=, list_partitions ::=, composite_range_partitions::=, composite_hash_partitions::=, composite_list_partitions::=, reference_partitioning::=, system_partitioning::=)

range_partitions::=

range_partitions.gifの説明が続きます。
range_partitions.gifの説明

(range_values_clause::=table_partition_description::=を参照)

hash_partitions::=

hash_partitions.gifの説明が続きます。
hash_partitions.gifの説明

(individual_hash_partitions::=hash_partitions_by_quantity::=を参照)

individual_hash_partitions::=

individual_hash_partitions.gifの説明が続きます。
individual_hash_partitions.gifの説明

(indexing_clause::=partitioning_storage_clause::=を参照)

hash_partitions_by_quantity::=

hash_partitions_by_quantity.gifの説明が続きます。
hash_partitions_by_quantity.gifの説明

(table_compression::=key_compression ::=を参照)

list_partitions::=

list_partitions.gifの説明が続きます。
list_partitions.gifの説明

(list_values_clause::=table_partition_description::=を参照)

composite_range_partitions::=

composite_range_partitions.gifの説明が続きます。
composite_range_partitions.gifの説明

(subpartition_by_range::=subpartition_by_list::=subpartition_by_hash::=range_partition_desc::=を参照)

composite_hash_partitions::=

composite_hash_partitions.gifの説明が続きます。
composite_hash_partitions.gifの説明

(subpartition_by_range::=subpartition_by_hash::=subpartition_by_list::=individual_hash_partitions::=hash_partitions_by_quantity::=を参照)

composite_list_partitions::=

composite_list_partitions.gifの説明が続きます。
composite_list_partitions.gifの説明

(subpartition_by_range::=subpartition_by_list::=subpartition_by_hash::=list_partition_desc::=を参照)

reference_partitioning::=

reference_partitioning.gifの説明が続きます。
reference_partitioning.gifの説明

(constraint::=reference_partition_desc::=を参照)

reference_partition_desc::=

reference_partition_desc.gifの説明が続きます。
reference_partition_desc.gifの説明

(table_partition_description::=を参照)

system_partitioning::=

system_partitioning.gifの説明が続きます。
system_partitioning.gifの説明

(reference_partition_desc::=を参照)

range_partition_desc::=

range_partition_desc.gifの説明が続きます。
range_partition_desc.gifの説明

(range_values_clause::=table_partition_description::=range_subpartition_desc::=list_subpartition_desc::=individual_hash_subparts::=hash_subparts_by_quantity::=を参照)

list_partition_desc::=

list_partition_desc.gifの説明が続きます。
list_partition_desc.gifの説明

(list_values_clause::=table_partition_description::=range_subpartition_desc::=list_subpartition_desc::=individual_hash_subparts::=hash_subparts_by_quantity::=を参照)

subpartition_template::=

subpartition_template.gifの説明が続きます。
subpartition_template.gifの説明

(range_subpartition_desc::=list_subpartition_desc::=individual_hash_subparts::=hash_subparts_by_quantity::=を参照)

subpartition_by_range::=

subpartition_by_range.gifの説明が続きます。
subpartition_by_range.gifの説明

(subpartition_template::=を参照)

subpartition_by_list::=

subpartition_by_list.gifの説明が続きます。
subpartition_by_list.gifの説明

(subpartition_template::=を参照)

subpartition_by_hash::=

subpartition_by_hash.gifの説明が続きます。
subpartition_by_hash.gifの説明

(subpartition_template::=を参照)

range_subpartition_desc::=

range_subpartition_desc.gifの説明が続きます。
range_subpartition_desc.gifの説明

(range_values_clause::=, indexing_clause::=, partitioning_storage_clause::=)

list_subpartition_desc::=

list_subpartition_desc.gifの説明が続きます。
list_subpartition_desc.gifの説明

(list_values_clause::=indexing_clause::=partitioning_storage_clause::=を参照)

individual_hash_subparts::=

individual_hash_subparts.gifの説明が続きます。
individual_hash_subparts.gifの説明

(indexing_clause::=partitioning_storage_clause::=を参照)

hash_subparts_by_quantity::=

hash_subparts_by_quantity.gifの説明が続きます。
hash_subparts_by_quantity.gifの説明

range_values_clause::=

range_values_clause.gifの説明が続きます。
range_values_clause.gifの説明

list_values_clause::=

list_values_clause.gifの説明が続きます。
list_values_clause.gifの説明

table_partition_description::=

table_partition_description.gifの説明が続きます。
table_partition_description.gifの説明

(deferred_segment_creation::=, indexing_clause::=, segment_attributes_clause ::=, table_compression::=, key_compression ::=, segment_attributes_clause ::=, LOB_storage_clause::=, varray_col_properties ::=, nested_table_col_properties ::=)

partitioning_storage_clause::=

partitioning_storage_clause.gifの説明が続きます。
partitioning_storage_clause.gifの説明

(table_compression::=を参照)

LOB_partitioning_storage::=

lob_partitioning_storage.gifの説明が続きます。
lob_partitioning_storage.gifの説明

parallel_clause::=

parallel_clause.gifの説明が続きます。
parallel_clause.gifの説明

enable_disable_clause::=

enable_disable_clause.gifの説明が続きます。
enable_disable_clause.gifの説明

(using_index_clause ::=を参照。exceptions_clauseは、CREATE TABLE文ではサポートされていません。)

using_index_clause::=

using_index_clause.gifの説明が続きます。
using_index_clause.gifの説明

(create_index::=index_properties::=を参照)

index_properties::=

index_properties.gifの説明が続きます。
index_properties.gifの説明

(global_partitioned_index::=local_partitioned_index ::=(「CREATE INDEX」の項)、index_attributes::=を参照。domain_index_clauseおよびXMLIndex_clauseは、using_index_clauseではサポートされていません。)

index_attributes::=

index_attributes.gifの説明が続きます。
index_attributes.gifの説明

(physical_attributes_clause::=logging_clause::=key_compression::=を参照。partial_index_clauseおよびparallel_clauseは、using_index_clauseではサポートされていません)

セマンティクス

relational_table

GLOBAL TEMPORARY

GLOBAL TEMPORARYを指定すると、表が一時的で、適切な権限を持つすべてのセッションからその定義が参照できることを指定できます。一時表のデータは、データを表に挿入するセッションでのみ参照できます。

初めて一時表を作成した時点では、その表のメタデータはデータ・ディクショナリに格納されますが、表データの領域は割り当てられません。表セグメントの領域は、その表に初めてDML操作を実行したときに割り当てられます。一時表の定義は、標準的な表の定義と同じように維持されますが、表に含まれる表セグメントとデータは、セッション固有またはトランザクション固有のデータのいずれかになります。表セグメントとデータがセッション固有であるか、トランザクション固有であるかは、ON COMMITキーワードで指定します。

セッションがバインドされていない場合にのみ、一時表でDDL操作(ALTER TABLEDROP TABLECREATE INDEXなど)を実行できます。セッションを一時表にバインドするには、一時表でINSERT操作を実行します。セッションを一時表からアンバインドするには、TRUNCATE文を発行するか、セッションを終了します。また、トランザクション固有の一時表からアンバインドするには、COMMITまたはROLLBACK文を発行します。


関連項目:

一時表の詳細は、『Oracle Database概要』および「表の作成: 一時表の例」を参照してください。

一時表の制限事項: 一時表には、次の制限事項があります。

  • 一時表は、パーティション化、索引構成化またはクラスタ化できません。

  • 一時表には、外部キー制約を指定できません。

  • 一時表は、ネストした表の列を含むことはできません。

  • LOB_storage_clauseTABLESPACEstorage_clauseまたはlogging_clauseは指定できません。

  • 一時表にパラレルUPDATEDELETEおよびMERGEはサポートされていません。

  • 一時表に対して指定できるsegment_attributes_clauseは、TABLESPACEのみで、単一の一時表領域を指定できます。

  • 一時表では、分散トランザクションはサポートされません。

  • 一時表には、INVISIBLEの列を格納できません。

schema

表を含めるスキーマを指定します。schemaを省略した場合、自分のスキーマ内に表が作成されます。

table

作成する表またはオブジェクト表の名前を指定します。名前は、「データベース・オブジェクトのネーミング規則」に指定されている要件を満たしている必要があります。

relational_properties

リレーショナル表のコンポーネントを指定します。

column_definition

column_definitionでは、列の特性を定義できます。

column

表の列の名前を指定します。

AS subqueryを指定する場合、索引構成表を作成しないかぎり、columnおよびdata typeを省略できます。索引構成表の作成時にAS subqueryを指定する場合は、columnを指定し、data typeを省略する必要があります。

表の列の絶対最大数は1000です。オブジェクト表、またはオブジェクトの列、ネストした表、VARRAYまたはREF型のリレーショナル表を作成する場合、制限の1000列までをカウントする有効な非表示列を作成して、ユーザー定義型の列をリレーショナル列にマップします。

data type

列のデータ型を指定します。

表の列のデータ型の注意事項: 表の列のデータ型には、次の注意事項があります。

  • AS subqueryを指定する場合、data typeを省略できます。索引構成表を作成してAS subqueryを指定する場合は、データ型を省略する必要があります。

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

  • LONG列を持つ表は作成しないでください。かわりに、LOB列(CLOBNCLOBまたはBLOB)を使用してください。LONG列は、下位互換性のためにサポートされています。

表の列のデータ型の制限事項: ROWID型の列を指定することはできますが、それらの列の値が有効な行IDであることは保証されません。


関連項目:

LONG列およびOracleが提供するデータ型については、「データ型」を参照してください。

SORT

SORTキーワードは、この表をハッシュ・クラスタの一部として作成する場合、およびクラスタ列でもある列にのみ有効です。

この句を指定すると、DML操作を実行するときに、データベースに対して、ハッシュ・ファンクションを適用した後でこの列でクラスタの行をソートするように指示できます。これによって、クラスタ化データでの後続の操作時に、応答時間が短縮される場合があります。


関連項目:

クラスタ表の作成の詳細は、「CLUSTER句」を参照してください。

VISIBLE | INVISIBLE

この句を使用すると、columnVISIBLEにするか、INVISIBLEにするかを指定できます。デフォルトは、VISIBLEです。

INVISIBLEの列は、ユーザー指定の非表示列です。INVISIBLEの列を表示する場合や、この列に値を割り当てる場合は、この列の名前を明示的に指定する必要があります。次に例を示します。

  • SELECT *構文では、INVISIBLEの列が表示されません。ただし、SELECT文の選択リストにINVISIBLEの列を含めると、その列は表示されるようになります。

  • INVISIBLEの列の値は、INSERT文のVALUES句で、暗黙的に指定することはできません。INVISIBLEの列は、列リストで指定する必要があります。

  • Oracle Call Interface (OCI)の説明とPL/SQLの%ROWTYPE属性で、INVISIBLEの列を明示的に指定する必要があります。

  • SQL*Plusを構成することで、INVISIBLEの列情報をDESCRIBEコマンドで表示されるようにできます。詳細は、『SQL*Plusユーザーズ・ガイドおよびリファレンス』を参照してください。

VISIBLEおよびINVISIBLEの列の注意事項: 次の注意事項は、VISIBLEおよびINVISIBLEの列に適用されます。

  • INVISIBLEの列は、CREATE TABLEの一部として指定すると、パーティション化キーとして使用できます。

  • INVISIBLEの列は、column_expression内に指定できます。

  • 仮想列は、INVISIBLEの列にすることができます。

  • データ・ディクショナリ・ビューのALL_DBA_、およびUSER_TAB_COLUMNSCOLUMN_ID列により、SELECT *問合せで返される表、ビューまたはマテリアライズド・ビューの列の順序が決まります。COLUMN_IDの値は、INVISIBLEの列についてはNULLになります。非表示の列を表示されるようにすると、この列には、最高値の次に利用可能なCOLUMN_ID値が割り当てられます。表示可能な列を非表示の列にすると、その列のCOLUMN_ID値はNULLに設定され、その列より大きい値のCOLUMN_IDを持つ列のCOLUMN_IDは、それぞれ1ずつ減らされます。

VISIBLEおよびINVISIBLEの列の制限事項: VISIBLEおよびINVISIBLEの列には、次の制限事項が適用されます。

  • INVISIBLEの列は、外部表、クラスタ表、または一時表ではサポートされません。

  • システム生成の非表示列を参照可能にすることはできません。


    注意:

    ある列がシステム生成の非表示列であるかどうかを判断するには、データ・ディクショナリ・ビューのALL_DBA_、およびUSER_TAB_COLSHIDDEN_COLUMN列とUSER_GENERATED列を問い合せます。詳細は、『Oracle Databaseリファレンス』を参照してください。

DEFAULT

DEFAULT句を指定すると、後続のINSERT文が列の値を省略した場合に列に割り当てられる値を指定できます。この式のデータ型は、列に指定したデータ型と一致している必要があります。列には、この式を保持できる大きさが必要です。

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

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

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

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

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


関連項目:

exprの構文については、「SQL式」を参照してください。

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

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

identity_clause

この句を使用すると、ID列を作成できます。このID列には、それ以降のINSERT文ごとに、順序ジェネレータからの増加または減少する整数値が割り当てられます。identity_options句を使用すると、順序ジェネレータを構成できます。

ALWAYS ALWAYSを指定すると、Oracle Databaseは、この列に値を割り当てるために、常に順序ジェネレータを使用するようになります。INSERTまたはUPDATEを使用して、列に明示的に値を割り当てようとすると、エラーが返されます。これはデフォルトです。

BY DEFAULT BY DEFAULTを指定すると、Oracle Databaseは順序ジェネレータを使用して列に値を割り当てますが、明示的に指定した値を列に割り当てることもできるようになります。ON NULLを指定すると、それ以降のINSERT文でNULLに評価される値を割り当てようとしたときに、Oracle Databaseは順序ジェネレータを使用して列に値を割り当てます。

identity_options

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


注意:

ID列を作成するときには、パフォーマンスを向上するために、デフォルトの20よりも大きな値を使用してCACHE句を指定してください。

ID列の制限事項: ID列には、次の制限事項が適用されます。

  • ID列は、表ごとに1列のみ指定できます。

  • identity_clauseを指定する場合は、column_definition句のdatatypeに、数値データ型を指定する必要があります。ユーザー定義のデータ型は指定できません。

  • identity_clauseを指定すると、column_definitionDEFAULT句を指定できなくなります。

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

  • ID列が暗号化されていると、その暗号化アルゴリズムが推測される可能性があります。ID列には、強い暗号化アルゴリズムを使用してください。

  • CREATE TABLE AS SELECTを使用すると、列に対するIDのプロパティが継承されなくなります。

encryption_spec

ENCRYPT句を指定すると、透過的データ暗号化(TDE)機能を利用して、定義する列を暗号化できます。暗号化できる列の型は、CHARNCHARVARCHAR2NVARCHAR2NUMBERDATE、LOBおよびRAWです。列を暗号化するユーザーなど、認可されたユーザーには、データは暗号化された形で表示されません。


注意:

列を暗号化するには、適切な権限を持つシステム管理者が、セキュリティ・モジュールを初期化し、キーストアをオープンし、暗号化キーを設定しておく必要があります。列の暗号化の一般的な情報については、『Oracle Database Advanced Securityガイド』を参照してください。関連するALTER SYSTEM文については、「security_clauses」を参照してください。

USING 'encrypt_algorithmこの句を使用すると、使用するアルゴリズムの名前を指定できます。有効なアルゴリズムは、AES256AES192AES128および3DES168です。この句を省略すると、AES192が使用されます。同じ表内の複数の列を暗号化するときに、ある1つの列に対してUSING句を指定した場合は、暗号化する他のすべての列についても同じアルゴリズムを指定する必要があります。

IDENTIFIED BY password この句を指定すると、指定したパスワードから列のキーが導出されます。

'integrity_algorithmこの句では、使用する整合性アルゴリズムを指定できます。有効な整合性アルゴリズムは、SHA-1およびNOMACです。

  • SHA-1を指定すると、TDEによってSecure Hash Algorithm(SHA-1)が使用され、整合性チェック用として、暗号化された各値に20バイトのMessage Authentication Code(MAC)が追加されます。これはデフォルトです。

  • NOMACを指定すると、TDEによってMACは追加されず、整合性チェックも実行されません。この場合、暗号化された値ごとに20バイトのディスク領域が節約されます。NOMACを使用してディスク領域を節約し、パフォーマンスを向上させる方法の詳細は、『Oracle Database Advanced Securityガイド』を参照してください。

表のすべての暗号化列で同じ整合性アルゴリズムが使用される必要があります。表の列ですでにSHA-1アルゴリズムを使用している場合は、NOMACパラメータによって同じ表の別の列を暗号化することはできません。表のすべての暗号化列で使用されている整合性アルゴリズムを変更する方法の詳細は、ALTER TABLEREKEY encryption_spec句に関する説明を参照してください。

SALT | NO SALT SALTを指定すると、列のクリア・テキストを暗号化する前に、「salt」と呼ばれるランダムな文字列をクリア・テキストに追加するようデータベースに指示します。これはデフォルトです。

NO SALTを指定すると、列のクリア・テキストを暗号化する前に、データベースはクリア・テキストにsaltを追加しません。

暗号化する列に対してSALTまたはNO SALTを指定する場合、次の点を考慮してください。

  • 列を索引キーとして使用する場合は、NO SALTを指定する必要があります。このような場面で使用されるSALTの詳細は、『Oracle Database Advanced Securityガイド』を参照してください。

  • 表に対して表圧縮を指定した場合、SALTで暗号化される列内のデータは圧縮されません。

LOB暗号化に対しては、SALTまたはNO SALTを指定できません。

encryption_specの制限事項: 列の暗号化には、次の制限事項があります。

  • 透過的データ暗号化は、従来のインポート/エクスポート・ユーティリティまたはトランスポータブル表領域ベースのエクスポートによってサポートされていません。かわりに、暗号化された列には、データ・ポンプ・インポート/エクスポート・ユーティリティを使用してください。

  • 外部表の列を暗号化する場合、その表のアクセス・タイプとしてORACLE_DATAPUMPが使用されている必要があります。

  • SYSが所有する表の列は暗号化できません。

  • 外部キーの列は、暗号化できません。


関連項目:

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

virtual_column_definition

virtual_column_definition句によって、仮想列を作成できます。仮想列はディスクには格納されません。仮想列の値は、一連の式またはファンクションを計算することによって必要に応じて導出されます。仮想列は、問合せ、DMLおよびDDL文で使用できます。索引付けが可能であり、統計を収集できます。したがって、他の列と同様に処理できます。例外と制限については、次の「仮想列の注意事項:」および「仮想列の制限事項:」で説明します。

column columnには、仮想列の名前を指定します。

datatype オプションで、仮想列のデータ型を指定できます。datatypeを省略すると、列のデータ型は基礎となる式のデータ型に基づいて決定されます。すべてのOracleスカラー・データ型およびXMLTypeがサポートされています。

VISIBLE | INVISIBLE この句を使用すると、仮想列をVISIBLEにするか、INVISIBLEにするかを指定できます。デフォルトは、VISIBLEです。詳細は、「VISIBLE | INVISIBLE」を参照してください。

GENERATED ALWAYSオプション・キーワードGENERATED ALWAYSは、意味を明確にするためのものです。列はディスクには格納されませんが、必要に応じて評価されることが示されます。

column_expression AS column_expression句によって、列の内容が決まります。column_expressionの詳細は、「列式」を参照してください。

VIRTUALオプション・キーワードVIRTUALは、意味を明確にするためのものです。

evaluation_edition_clause エディション化されたPL/SQLファンクションをcolumn_expressionで参照する場合は、この句を指定する必要があります。この句を使用すると、エディショニングされたPL/SQLファンクションの名前解決時に検索されたエディション(評価エディション)を指定できます。

  • CURRENT EDITIONを指定すると、このDDL文が実行されるエディションを検索できます。

  • EDITION editionを指定すると、editionを検索できます。

  • NULL EDITIONを指定することは、evaluation_edition_clauseを省略することと同じです。

evaluation_edition_clauseを省略すると、エディショニングされたオブジェクトは名前解決時に認識されなくなるためエラーが発生します。評価エディションが削除されると、それ以降の仮想列への問合せでエラーが発生します。

データベースは、仮想列が参照するファンクションの依存関係を維持しません。そのため、仮想列が非エディション・ファンクションを参照しているときに、そのファンクションをエディション・ファンクションにすると、次の操作でエラーが発生することがあります。

  • その仮想列への問合せ

  • その仮想列を含む行の更新

  • その仮想列にアクセスするトリガーの起動


関連項目:

仮想列に評価エディションを指定する方法の詳細は、『Oracle Database開発ガイド』を参照してください。

unusable_editions_clause この句を使用すると、1つ以上のエディションで仮想列の式を問合せの評価に使用できないことを指定できます。残りの一連のエディションでは、オプティマイザが安全に仮想列の式を使用して問合せを評価できます。

たとえば、仮想列にファンクション索引を定義したとします。オプティマイザはそのファンクション索引を使用して、仮想列の式がWHERE句に含まれる問合せを評価できます。問合せが、仮想列を使用できる一連のエディションに含まれるエディションでコンパイルされた場合、オプティマイザは、索引を使用して問合せを評価することを検討します。問合せが、仮想列を使用できる一連のエディションに含まれないエディションでコンパイルされた場合、オプティマイザは、索引を使用することを検討しません。


関連項目:

ファンクション索引を使用した最適化の詳細は、『Oracle Database概要』を参照してください。

UNUSABLE BEFORE句 この句を使用すると、先行のエディションで仮想列の式を問合せの評価に使用できないことを指定できます。

  • CURRENT EDITIONを指定すると、このDDL文が実行されるエディションより前のエディションで仮想列の式が使用禁止になります。

  • EDITION editionを指定すると、指定したeditionより前のエディションで仮想列の式が使用禁止になります。

UNUSABLE BEGINNING WITH句 この句を使用すると、特定のエディション以降のエディションで仮想列の式を問合せの評価に使用できないことを指定できます。

  • CURRENT EDITIONを指定すると、このDDL文が実行されるエディションと、それ以降のエディションで仮想列の式が使用禁止になります。

  • EDITION editionを指定すると、指定したeditionとそれ以降のエディションで仮想列の式が使用禁止になります。

  • NULL EDITIONを指定することは、UNUSABLE BEGINNING WITH句を省略することと同じです。

この句に指定したエディションがその後削除されても、仮想列への影響はありません。

仮想列の注意事項:

  • column_expressionで列レベルのセキュリティが実装された列を参照する場合、仮想列は基本列のセキュリティ・ルールを継承しません。この場合は、仮想列に対して列レベルのセキュリティ・ポリシーを複製するか、またはデータを暗黙的にマスクするファンクションを適用して、仮想列のデータを保護する必要があります。たとえば、一般的にクレジット・カード番号は列レベルのセキュリティ・ポリシーで保護しますが、コール・センターの従業員に対しては確認目的でクレジット・カード番号の下4桁を参照できるようにします。このような場合、クレジット・カード番号の下4桁のサブストリングを取るように仮想列を定義できます。

  • 仮想列に定義された表の索引は、表のファンクション索引と同じです。

  • 仮想列を直接更新することはできません。したがって、UPDATE文のSET句に仮想列を指定することはできません。ただし、UPDATE文のWHERE句には仮想列を指定できます。同様に、DELETE文のWHERE句に仮想列を指定して、仮想列の導出値に基づいて表から行を削除できます。

  • 仮想列を含む表をFROM句に指定する問合せは、結果キャッシュに適応します。結果キャッシュの詳細は、「RESULT_CACHEヒント」を参照してください。

  • 作成時にファンクションにDETERMINISTICが明示的に指定されている場合、column_expressionは、PL/SQLファンクションを参照できます。ただし、後でファンクションが置き換えられた場合、仮想列に依存する定義は無効にされません。そのような場合、表にデータが含まれていると、仮想列が制約、索引またはマテリアライズド・ビューの定義あるいは結果キャッシュで使用された場合に、仮想列を参照する問合せで不適切な結果が戻される場合があります。そのため、仮想列の決定的なPL/SQLファンクションを置き換えるために、次の手順を実行します。

    • 仮想列の制約を無効にして再度有効にします。

    • 仮想列の索引を再作成します。

    • 仮想列にアクセスするマテリアライズド・ビューを完全にリフレッシュします。

    • キャッシュされた問合せが仮想列にアクセスした場合、結果キャッシュをフラッシュします。

    • 表の統計情報を再収集します。

  • 仮想列は、INVISIBLEの列にすることができます。column_expressionには、INVISIBLEの列を含めることができます。

仮想列の制限事項:

  • 仮想列は、リレーショナル・ヒープ表にのみ作成できます。仮想列は、索引構成表、外部表、オブジェクト表、クラスタ化表または一時表ではサポートされません。

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

    • 別の仮想列を名前で参照できません。

    • column_expressionで参照される列は、同じ表で定義されている必要があります。

    • 決定的なユーザー定義ファンクションを参照できますが、その場合、仮想列をパーティション化キー列として使用できません。

    • column_expressionの出力は、スカラー値である必要があります。


    関連項目:

    column_expressionの詳細および制限事項は、「列式」を参照してください。

  • 仮想列は、Oracleが提供するデータ型、ユーザー定義型、またはLOBまたはLONG RAWにすることはできません。

  • パーティション列として使用する仮想列を定義する式には、PL/SQLファンクションへのコールを指定できません。


関連項目:

仮想列を持つ表の作成の例については、「仮想表の列の追加例:」および『Oracle Database管理者ガイド』を参照してください。

period_definition

period_definition句を使用すると、tableの有効期間ディメンションを作成できます。

この句によって、tableの時制有効性のサポートが実装されます。この句を指定する場合、table内の1つの列に開始日とタイムスタンプが含まれ、table内の別の列に終了日とタイムスタンプが含まれます。これら2つの列によって、tableの有効期間ディメンション、つまり各行が有効と見なされる期間が定義されます。Oracleフラッシュバック問合せを使用すると、特定の時点で、または特定の期間中に有効と見なされるかどうかに基づいて、tableから行を取り出すことができます。

表の作成時には、最大で1つの有効期間ディメンションを指定できます。その後、ALTER TABLEadd_period_clauseを使用して、他の有効期間ディメンションを表に追加できます。

valid_time_column 有効期間ディメンションの名前を指定します。名前は、「データベース・オブジェクトのネーミング規則」に指定されている要件を満たしている必要があります。Oracle Databaseによって、この名前を持つNUMBERデータ型のINVISIBLE仮想列がtable内に作成されます。

start_time_columnおよびend_time_column オプションで、次のようにこれらの句を指定できます。

  • start_time_columnは、開始日またはタイムスタンプを含む列の名前を指定するために使用します。

  • end_time_columnは、終了日またはタイムスタンプを含む列の名前を指定するために使用します。

start_time_columnend_time_columnに指定する名前は、「データベース・オブジェクトのネーミング規則」に記載されている要件を満たしている必要があります。

これらの句を指定する場合、start_time_columnend_time_columnCREATE TABLEcolumn_definition句内で定義する必要があります。各列は日時データ型(DATETIMESTAMPTIMESTAMP WITH TIME ZONEまたはTIMESTAMP WITH LOCAL TIME ZONE)にする必要があり、VISIBLEまたはINVISIBLEにできます。

これらの句を指定しなかった場合、Oracle Databaseによって、valid_time_column_STARTおよびvalid_time_column_ENDという形式の名前を持つ列が作成されます。これらの列のデータ型はTIMESTAMP WITH TIME ZONEであり、すべてINVISIBLEです。

start_time_columnend_time_columnの値は、他の列と同じように挿入および更新できます。考慮事項は次のとおりです。

  • start_time_columnの値がNULLの場合、end_time_columnの値よりも早い時間を示すすべての時間値の行が有効と見なされます。

  • end_time_columnの値がNULLの場合、start_time_columnの値よりも遅い時間を示すすべての時間値の行が有効と見なされます。

  • どちらの列の値もNULLでない場合、start_time_columnの値はend_time_columnの値よりも早い時間である必要があります。これにより、start_time_columnend_time_columnの間(これら両方の値を含む)の時間を示すすべての時間値の行が有効と見なされます。

  • どちらの列の値もNULLの場合、すべての時間値の行が有効と見なされます。

有効期間ディメンション列の制限事項 有効期間ディメンション列には、次の制限事項があります。

  • valid_time_columnは、内部使用のみを目的としています。DDLまたはDML操作は実行できませんが、1つ例外があります。ALTER TABLEdrop_period_clauseを使用すると、列を削除できます。

  • start_time_columnend_time_columnを削除する唯一の方法は、ALTER TABLEdrop_period_clauseを使用することです。

  • start_time_columnend_time_columnがOracle Databaseによって自動的に作成された場合、それらはINVISIBLEになり、後からVISIBLEには変更できません。


関連項目:

  • 時制有効性の詳細は、『Oracle Database開発ガイド』を参照してください。

  • Oracleフラッシュバック問合せの詳細は、「SELECT」「flashback_query_clause」を参照してください。

  • 有効期間ディメンションを追加および削除する方法の詳細は、「ALTER TABLE」「add_period_clause」「drop_period_clause」を参照してください。


制約句

制約句を使用すると、表の列に対する制約を作成できます。DEFERRABLE以外の主キー制約を索引構成表に指定してください。これらの制約の構文、詳細および使用例は、constraintを参照してください。

inline_ref_constraintおよびout_of_line_ref_constraint  これらの句を使用すると、REF型の列を指定できます。これらの句の唯一の違いは、表レベルでout_of_line_ref_constraintを指定することです。このため、定義するREF型の列または属性を識別する必要があります。inline_ref_constraintは、REF型の列または属性の定義の一部として指定してください。


関連項目:

「REF制約の例」

inline_constraint  inline_constraintを使用すると、整合性制約を列定義の一部として定義できます。

オブジェクト型の列のスカラー属性に、一意制約、主キー制約および参照制約を作成できます。また、オブジェクト型の列のNOT NULL制約、オブジェクト型の列またはオブジェクト型の列の属性を参照するCHECK制約も作成できます。

out_of_line_constraint  out_of_line_constraint構文を使用すると、整合性制約を表定義の一部として定義できます。

supplemental_logging_props

supplemental_logging_props句を指定すると、追加のデータがログ・ストリームに入れられ、ログに基づくツール製品をサポートできます。

supplemental_log_grp_clause この句を使用すると、名前付きのログ・グループを作成できます。

  • NO LOG句を使用すると、REDOログから1つ以上の列を省略できます。この句を指定しない場合、これらの列は名前付きのログ・グループのREDOに含まれます。名前付きのログ・グループに、1つ以上の固定長列をNO LOGを使用せずに指定する必要があります。

  • ALWAYSを指定すると、更新時にログ・グループのすべての列がREDOに含まれます。関連付けられた行が変更されるとログ・グループのすべての列に対してサプリメンタル・ロギングが行われるため、これは無条件ログ・グループといいます(「常時ログ・グループ」ともいいます)。ALWAYSを指定しない場合、ログ・グループの任意の列が変更された場合のみ、ログ・グループのすべての列に対してサプリメンタル・ロギングが行われます。これは、条件付きログ・グループといいます。

サプリメンタル・ロギングが指定されているかどうかを確認するには、適切なUSER_ALL_またはDBA_LOG_GROUP_COLUMNSデータ・ディクショナリ・ビューを問い合せます。

supplemental_id_key_clause この句を使用すると、主キー列、一意キー列および外部キー列のすべて、またはこれらの列の組合せに対してサプリメンタル・ロギングを実行できます。Oracle Databaseは、無条件ログ・グループまたは条件付きログ・グループのいずれかを生成します。無条件ログ・グループでは、関連付けられた行が変更されると、ログ・グループのすべての列に対してサプリメンタル・ロギングが行われます。条件付きログ・グループでは、ログ・グループの任意の列が変更された場合のみ、ログ・グループのすべての列に対してサプリメンタル・ロギングが行われます。

  • ALL COLUMNSを指定すると、この行の最大サイズが固定長のすべての列がREDOログに含まれます。このようなREDOログは、システム生成無条件ログ・グループといいます。

  • PRIMARY KEY COLUMNSを指定すると、主キーを持つすべての表において、更新が実行されるたびに、主キーのすべての列がREDOログに置かれます。Oracle Databaseは、次のとおりサプリメンタル・ロギングを行う列を評価します。

    • まず、主キー制約が指定されている列が選択されます(制約が検証済か、または制約にRELYのマークが付いていて、DISABLEDおよびINITIALLY DEFERREDのマークが付いていない場合)。

    • 主キー列が存在しない場合、1つ以上のNOT NULL列を持つ最小のUNIQUE索引が検索され、この索引の列が使用されます。

    • このような索引が存在しない場合、表のすべてのスカラー列に対してサプリメンタル・ロギングが行われます。

  • UNIQUE COLUMNSを指定すると、一意キーまたはビットマップ索引を持つすべての表において、一意キー列またはビットマップ索引列が変更された場合、一意キーまたはビットマップ索引に属するその他のすべての列もREDOログに置かれます。このようなログ・グループは、システム生成条件付きログ・グループといいます。

  • FOREIGN KEY COLUMNSを指定すると、外部キーを持つすべての表において、外部キー列が変更された場合、外部キーに属するその他のすべての列もREDOログに置かれます。このようなREDOログは、システム生成条件付きログ・グループといいます。

この句を複数回指定すると、指定するたびに個別のログ・グループが作成されます。サプリメンタル・ロギング・データが指定されているかどうかを確認するには、適切なUSER_ALL_またはDBA_LOG_GROUPSデータ・ディクショナリ・ビューを問い合せます。

ON COMMIT

ON COMMIT句は、一時表を作成する場合のみに適用されます。この句を使用すると、一時表のデータがトランザクションまたはセッションの存続期間中保持されるかどうかを指定できます。

DELETE ROWS DELETE ROWSは、トランザクション固有の一時表に対して指定します。これはデフォルトです。各コミット後に表が切り捨てられます(すべての行が削除されます)。

PRESERVE ROWS PRESERVE ROWSは、セッション固有の一時表に対して指定します。セッション終了時に表が切り捨てられます(すべての行が削除されます)。

physical_properties

物理プロパティは、エクステントとセグメントの処理、および表の記憶特性に関係します。

deferred_segment_creation

この句を使用すると、この表のセグメントを作成するタイミングを指定できます。

  • SEGMENT CREATION DEFERRED: 表のセグメント、表のLOB列のセグメント、表作成の一部として暗黙的に作成される索引、およびその後で明示的に表に作成される索引の作成が遅延されます。これらは、最初のデータ行が表に挿入された後に作成されます。このとき、表のセグメント、LOB列と索引、および明示的に作成される索引がすべて実体化され、このCREATE TABLE文(明示的に作成される索引の場合は、CREATE INDEX文)に指定されたすべての記憶域プロパティが継承されます。これらのセグメントは、最初の挿入操作がコミットされていないか、ロールバックされたかに関係なく作成されます。これはデフォルト値です。


    注意:

    遅延セグメント作成を使用する表を多く作成する場合、データベースに十分な領域を割り当て、最初の行の挿入時にすべての新しいセグメントに対して十分な領域が確保されるようにしてください。

  • SEGMENT CREATION IMMEDIATE: 表のセグメントは、このCREATE TABLE文の一部として作成されます。

即時セグメント作成は、たとえば、アプリケーションがDBA_USER_およびALL_SEGMENTSデータ・ディクショナリ・ビューに表示されるオブジェクトに依存している場合に有効です。このようなオブジェクトは、セグメントが作成されるまでビューに表示されないためです。この句によって、DEFERRED_SEGMENT_CREATION初期化パラメータの設定が上書きされます。

既存の表、そのLOB列または索引にセグメントが作成されているかどうかを確認するには、USER_TABLESUSER_INDEXESまたはUSER_LOBSSEGMENT_CREATED列を問い合せます。

セグメントが作成されていない表の注意事項: セグメントが実体化されていない表には、次の規則が適用されます。

  • この表をCREATE TABLE ... AS副問合せを使用して作成する場合は、ソース表に行がなければ、新しい表のセグメントの作成は遅延されます。ソース表に行がある場合は、新しい表のセグメントは遅延なしで作成されます。

  • セグメントが実体化されないうちにALTER TABLE ... ALLOCATE EXTENTを指定すると、セグメントが実体化され、エクステントが割り当てられます。ただし、表の索引に対するDDL文のALLOCATE EXTENT句からはエラーが戻されます。

  • 表、そのLOB列または索引に対するDDL文の場合は、DEALLOCATE UNUSEDを指定しても無視されます。

  • セグメントが作成されていない表または表パーティションの索引に対するONLINE操作は、特に警告もなく無効になり、OFFLINE操作として実行されます。

  • 1つ以上のLOB列がある表で次のいずれかのDDL文を実行すると、結果のパーティションまたはサブパーティションが実体化されます。

    • ALTER TABLE SPLIT [SUB]PARTITION

    • ALTER TABLE MERGE [SUB]PARTITIONS

    • ALTER TABLE ADD [SUB]PARTITION (ハッシュ・パーティションのみ)

    • ALTER TABLE COALESCE [SUB]PARTITION (ハッシュ・パーティションのみ)

遅延セグメント作成の制限事項: この句には、次の制限事項があります。

  • 索引構成表、クラスタ化表、グローバル一時表、セッション固有の一時表、内部表、特定の型の表、AQ表、外部表、およびSYSSYSTEMPUBLICOUTLNまたはXDBが所有する表に対して、セグメント作成を遅延させることはできません。

  • 遅延セグメント作成は、ビットマップ結合索引およびドメイン索引ではサポートされていません。

  • 遅延セグメント作成は、ディクショナリ管理表領域ではサポートされていません。

  • 遅延セグメント作成は、SYSTEM表領域ではサポートされていません。

  • シリアル化可能トランザクションは、遅延セグメント作成では動作しません。セグメントが作成されていない空の表にデータを挿入しようとすると、エラーになります。


関連項目:

セグメント割当ての概要は、『Oracle Database概要』を参照してください。DEFERRED_SEGMENT_CREATION初期化パラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。

segment_attributes_clause

segment_attributes_clauseを指定すると、表の物理属性および表領域の記憶域を指定できます。

physical_attributes_clause physical_attributes_clauseを指定すると、PCTFREEPCTUSEDINITRANSパラメータの値、および表の記憶特性を指定できます。

  • 非パーティション表の場合、指定した各パラメータおよび記憶特性は、表に関連付けられたセグメントの実際の物理属性となります。

  • パーティション表の場合、パーティション作成文のPARTITION句で明示的に値を上書きしないかぎり、指定したパラメータおよび記憶特性の値は、CREATE文(および後続のALTER TABLE ... ADD PARTITION文)で指定するすべてのパーティションに関連付けられたセグメントのデフォルト物理属性になります。

この句を省略すると、PCTFREEは10、PCTUSEDは40、INITRANSは1に設定されます。


関連項目:


TABLESPACE Oracle Databaseが、表、オブジェクト表OIDINDEX、パーティション、LOBのデータ・セグメント、LOBの索引セグメントまたは索引構成表のオーバーフロー・データ・セグメントを作成する表領域を指定します。TABLESPACEを省略した場合、その表を含むスキーマの所有者のデフォルトの表領域内に作成されます。

1つ以上のLOB列を持つヒープ構成表の場合、LOB記憶域に対するTABLESPACEを省略すると、表を作成する表領域にLOBデータおよび索引セグメントが作成されます。

1つ以上のLOB列を持つ索引構成表の場合、TABLESPACEを省略すると、索引構成表の主キー索引セグメントが作成された表領域に、LOBデータおよび索引セグメントが作成されます。

非パーティション表の場合、TABLESPACEに指定する値は、表に関連付けられたセグメントの実際の物理属性となります。パーティション表の場合、TABLESPACEに指定する値は、PARTITION記述でTABLESPACEを指定しないかぎり、このCREATE文(および後続のALTER TABLE ... ADD PARTITION文)で指定されたすべてのパーティションに関連付けられたセグメントのデフォルト物理属性となります。


関連項目:

表領域の詳細は、「CREATE TABLESPACE」を参照してください。

logging_clause

表、および制約のために必要な索引、パーティションまたはLOBの記憶特性の作成をREDOログ・ファイルに記録する(LOGGING)かしないか(NOLOGGING)を指定します。表のロギング属性は、その索引の属性に依存しません。

表、パーティションまたはLOBの記憶域に対して、後で実行されるダイレクト・ローダー(SQL*Loader)操作およびダイレクト・パス・インサート操作のログをとる(LOGGING)かとらない(NOLOGGING)かも指定します。

この句の詳細は、logging_clauseを参照してください。

table_compression

table_compression句は、ヒープ構成表に対してのみ有効です。この句を使用すると、ディスク使用量を削減するためにデータ・セグメントを圧縮するかどうかを指定できます。COMPRESS句を使用すると、表を圧縮できます。NOCOMPRESS句を指定すると、表の圧縮が無効になります。デフォルトはNOCOMPRESSです。

COMPRESS キーワードCOMPRESSのみを指定することは、ROW STORE COMPRESS BASICを指定することと同じであり、基本表圧縮が使用可能になります。

ROW STORE COMPRESS BASIC ROW STORE COMPRESSまたはROW STORE COMPRESS BASICを指定して表の圧縮を使用可能にすると、基本表圧縮が使用可能になります。Oracle Databaseでは、表の圧縮が効果的である場合に、ダイレクト・パス・インサート操作中にデータの圧縮を開始します。元のインポート・ユーティリティ(imp)はダイレクト・パス・インサートをサポートしないため、圧縮フォーマットでデータをインポートすることはできません。

基本表圧縮が指定された表では、physical_attributes_clausePCTFREEの値を明示的に設定しないかぎり、PCTFREE値0を使用して圧縮が最大化されます。


関連項目:

ダイレクト・パス・インサート操作の制限などの詳細は、「従来型INSERTおよびダイレクト・パス・インサート」を参照してください。

ROW STORE COMPRESS ADVANCED ROW STORE COMPRESS ADVANCEDを指定して表の圧縮を有効にすると、高度な行圧縮が有効になります。Oracle Databaseは表でのすべてのDML操作中にデータの圧縮を開始します。OLTP環境にはこの圧縮形式をお薦めします。

ROW STORE COMPRESS ADVANCEDまたはNOCOMPRESSが指定された表では、PCTFREEのデフォルトを明示的に上書きしないかぎり、デフォルト値10を使用して、圧縮を最大限にしながらデータへの今後のDML変更も考慮します。

以前のリリースでは、高度な行圧縮は、COMPRESS FOR OLTPを使用することで有効になっていました。この構文は現在非推奨になっています。

COLUMN STORE COMPRESS FOR { QUERY | ARCHIVE } COLUMN STORE COMPRESS FOR QUERYまたはCOLUMN STORE COMPRESS FOR ARCHIVEを指定すると、ハイブリッド列圧縮が有効になります。ハイブリッド列圧縮を使用すると、バルク・ロード操作中にデータを圧縮できます。ロード処理中にデータが列指向の書式に変換されてから、圧縮されます。指定したレベルに適した圧縮アルゴリズムがOracle Databaseで使用されます。一般的に、レベルが高くなるほど、圧縮率は大きくなります。ハイブリッド列圧縮を使用すると高い圧縮率が得られますが、CPUコストも高くなります。そのため、この圧縮形式は更新頻度が高くないデータに使用することをお薦めします。

COLUMN STORE COMPRESS FOR QUERYは、データ・ウェアハウス環境で有効です。有効な値はLOWおよびHIGHで、HIGHの方が高い圧縮率が得られます。デフォルトはHIGHです。

COLUMN STORE COMPRESS FOR ARCHIVEを使用すると、COLUMN STORE COMPRESS FOR QUERYより高い圧縮率が得られます。長期間格納するデータを圧縮する場合に有効です。有効な値はLOWおよびHIGHで、HIGHを指定すると実行可能な最も高い圧縮率が得られます。デフォルトはLOWです。

COLUMN STORE COMPRESSを指定することは、COLUMN STORE COMPRESS FOR QUERY HIGHを指定することと同じです。

COLUMN STORE COMPRESS FOR QUERYまたはCOLUMN STORE COMPRESS FOR ARCHIVEが指定された表では、physical_attributes_clausePCTFREEの値を明示的に設定しないかぎり、PCTFREE値に0を使用して圧縮を最大限にします。これらの表では、PCTFREEは、ダイレクト・パス・インサートを使用してロードしたブロックには影響しません。PCTFREEは、従来型INSERTを使用してロードしたブロック、およびダイレクト・パス・インサートを使用して最初にロードしたブロックに対してDML操作を行った結果作成されるブロックに適用されます。


関連項目:

一部のOracleストレージ・システムに備わっているハイブリッド列圧縮機能の詳細は、『Oracle Database概要』を参照してください。

表の圧縮の注意事項: 表の圧縮は、ヒープ構成表の次の部分に対して指定できます。

  • ヒープ構成表全体の場合は、relational_tableまたはobject_tablephysical_properties句で指定します。

  • レンジ・パーティションの場合は、range_partitions句のtable_partition_descriptionで指定します。

  • コンポジット・レンジ・パーティションの場合は、range_partition_desc句のtable_partition_descriptionで指定します。

  • コンポジット・リスト・パーティションの場合は、list_partition_desc句のtable_partition_descriptionで指定します。

  • リスト・パーティションの場合は、list_partitions句のtable_partition_descriptionで指定します。

  • システム・パーティションまたは参照パーティションの場合は、reference_partition_desc句のtable_partition_descriptionで指定します。

  • ネストした表の記憶表の場合は、nested_table_col_properties句で指定します。


    関連項目:

    DBMS_COMPRESSIONパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。これは、アプリケーションに適した圧縮レベルを選択するのに役立つパッケージです。例を含む表の圧縮の詳細は、『Oracle Database管理者ガイド』を参照してください。

表の圧縮の制限事項: 表の圧縮には、次の制限事項があります。

  • BasicFiles LOBのデータ・セグメントは圧縮されません。SecureFiles LOBの圧縮の詳細は、「LOB_compression_clause」を参照してください。

  • COMPRESS BASICを使用する表の列は削除できませんが、未使用に設定することはできます。ROW STORE COMPRESS ADVANCEDCOLUMN STORE COMPRESS FOR QUERYおよびCOLUMN STORE COMPRESS FOR ARCHIVEを使用する表では、ALTER TABLE ... drop_column_clauseのすべての操作が有効です。

  • 索引構成表、オーバーフロー・セグメント、オーバーフロー・セグメントのパーティションまたは索引構成表のマッピング表セグメントには、どのタイプの表の圧縮も指定できません。

  • 外部表またはクラスタの一部である表には、どのタイプの表の圧縮も指定できません。

  • LONG列またはLONG RAW列を持つ表、SYSスキーマによって所有されたSYSTEM表領域内の表、あるいは行の依存が使用可能な表に対しては、どのタイプの表の圧縮も指定できません。

  • フラッシュバック・アーカイブに対応した表に対しては、ハイブリッド列圧縮は指定できません。

  • オブジェクト表、XMLType表、抽象データ型を持つ列、表として格納されるコレクションまたはOPAQUE型(オブジェクトとして格納されるXMLType列を含む)のオブジェクト・リレーショナル機能に対しては、ハイブリッド列圧縮は指定できません。

  • ハイブリッド列圧縮で圧縮された表の行を更新すると、行のROWIDが変更される可能性があります。

  • ハイブリッド列圧縮で圧縮された表では、単一の行に対する更新によって複数の行がロックされる可能性があります。そのため、書込みトランザクションの同時実効性が影響を受ける場合があります。

  • ハイブリッド列圧縮で圧縮された表に外部キー制約が定義されている場合、INSERTAPPENDヒントを指定してデータを挿入すると、挿入するデータはOLTPを使用して圧縮されます。ハイブリッド列圧縮でデータを圧縮するには、外部キー制約を使用禁止にし、INSERTAPPENDヒントを指定してデータを挿入してから、外部キー制約を使用可能にします。

ilm_clause

この句を使用すると、自動データ最適化ポリシーをtableに追加できます。

この句のセマンティクスは、CREATE TABLEおよびALTER TABLEで同じですが、追加で次の制限事項があります。CREATE TABLEに指定できるのは、ADD POLICY句のみです。この句のセマンティクスの詳細は、「ilm_clause」を参照してください。

自動データ最適化の制限事項: 自動データ最適化には、次の制限事項があります。

  • オブジェクト・タイプ、索引構成表、クラスタ化表またはマテリアライズド・ビューを含む表では自動データ最適化はサポートされません。

  • 自動データ最適化はマルチテナント・コンテナ・データベース(CDB)ではサポートされません。

  • 時制有効性をサポートする表またはデータベース内アーカイブの行アーカイブが有効な表では、行レベルのポリシーはサポートされません。

ilm_policy_clause

この句を使用すると、自動データ最適化ポリシーの説明を記述できます。

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

RECOVERABLE | UNRECOVERABLE

これらのキーワードは以前のリリースで非推奨になったもので、それぞれLOGGINGおよびNOLOGGINGに置き換えられています。RECOVERABLEおよびUNRECOVERABLEは、下位互換性のためにサポートされていますが、LOGGINGおよびNOLOGGINGキーワードを使用することをお薦めします。

[UN]RECOVERABLEの制限事項: この句には、次の制限事項があります。

  • パーティション表またはLOB記憶特性にRECOVERABLEを指定できません。

  • パーティション表または索引構成表にUNRECOVERABLEを指定できません。

  • AS subqueryでのみUNRECOVERABLEを指定できます。

ORGANIZATION

ORGANIZATION句を指定すると、表のデータ行が格納される順序を指定できます。

HEAP HEAPを使用すると、tableのデータ行の格納順序を特定しないことを指定できます。これはデフォルトです。

INDEX INDEXを使用すると、tableを索引構成表として作成することを指定できます。索引構成表では、表の主キーが定義された索引内にデータ行が格納されます。

EXTERNAL EXTERNALを使用すると、表がデータベースの外部にある読取り専用表であることを指定できます。


関連項目:

「外部表の例:」

index_org_table_clause

index_org_table_clauseを使用すると、索引構成表を作成できます。表の行(主キー列の値と非キー列の値の両方)は、主キーに基づいて作成された索引に格納されます。このため、索引構成表は主キーベースのアクセスおよび操作に最適です。索引構成表は、次のいずれかの表のかわりです。

  • CREATE INDEX文を使用して主キーベースで索引付けされるクラスタ化されていない表。

  • 索引クラスタに格納されるクラスタ表。索引クラスタは、表に対する主キーをクラスタ・キーにマップするCREATE CLUSTER文を使用して作成されます。

主キーは行を一意に識別するため、索引構成表には主キーを指定してください。主キーにはDEFERRABLEを指定できません。索引構成表の行に直接アクセスする場合は、ROWIDのかわりに主キーを使用してください。

索引構成表がパーティション化され、LOB列を含む場合、最初にindex_org_table_clause、次にLOB_storage_clause、その後に適切なtable_partitioning_clausesを指定する必要があります。

索引構成表を作成する場合は、CREATE TABLE ... AS SELECT文の副問合せで、TO_LOBファンクションを使用してLONG列をLOB列に変換することはできません。LONG列を含まない索引構成表を作成し、INSERT ...AS SELECT文でTO_LOBファンクションを使用してください。

索引構成表のROWID疑似列は、物理ROWIDではなく、論理ROWIDを戻します。データ型ROWIDとして作成した列には、IOTの論理ROWIDを格納できません。データ型ROWIDの列に格納できるデータは、ヒープ構成表のROWIDのみです。IOTの論理ROWIDを格納する場合は、かわりに型UROWIDの列を作成します。データ型UROWIDの列には、物理ROWIDと論理ROWIDの両方を格納できます。

索引構成表の制限事項: 索引構成表には、次の制限事項があります。

  • 索引構成表のROWID疑似列は、物理ROWIDではなく、論理ROWIDを戻します。データ型ROWIDとして作成した列には、IOTの論理ROWIDを格納できません。データ型ROWIDの列に格納できるデータは、ヒープ構成表のROWIDのみです。IOTの論理ROWIDを格納する場合は、かわりに型UROWIDの列を作成します。データ型UROWIDの列には、物理ROWIDと論理ROWIDの両方を格納できます。

  • 索引構成表には、仮想列は定義できません。

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

  • 索引構成表がネストした表またはVARRAYである場合は、table_partitioning_clausesを指定できません。

PCTTHRESHOLD integer 索引ブロック内で、索引構成表の行を格納するために確保されている領域の割合(パーセント)を指定します。PCTTHRESHOLDは、主キーを保持するために十分な大きさである必要があります。指定したしきい値を超える列から始まる行の後続列はすべて、オーバーフロー・セグメントに格納されます。PCTTHRESHOLDは1から50の値を取る必要があります。PCTTHRESHOLDを指定しない場合のデフォルト値は50です。

PCTTHRESHOLDの制限事項: PCTTHRESHOLDは、索引構成表の個別パーティションに対して指定できません。

mapping_table_clauses MAPPING TABLEを指定すると、ローカルから物理ROWIDへのマッピングを作成してヒープ構成表に格納できます。このマッピングは、索引構成表のビットマップ索引の作成に必要です。索引構成表がパーティション化されている場合、マッピング表もパーティション化され、マッピング表のパーティションの名前および物理属性は実表のパーティションと同じになります。

マッピング表またはマッピング表のパーティションは、親である索引構成表またはパーティションと同じ表領域に作成されます。マッピング表またはそのパーティションの記憶特性に対して、問合せ、DML操作または変更は実行できません。

key_compression  key_compression句を使用すると、索引構成表のキー圧縮を使用可能または使用禁止にできます。

  • COMPRESSを指定すると、キー圧縮が使用可能になります。これによって、索引構成表の主キー列の値が重複しなくなります。integerを使用して、接頭辞の長さ(圧縮する接頭辞列数)を指定します。

    接頭辞の長さの有効範囲は、1から(主キー列数-1)までです。デフォルトでは(主キー列数-1)になります。

  • NOCOMPRESSを指定すると、索引構成表でのキー圧縮が使用禁止になります。これはデフォルトです。

索引構成表のキー圧縮の制限事項: パーティション・レベルでは、COMPRESSを指定できますが、integerで接頭辞の長さを指定できません。

index_org_overflow_clause  index_org_overflow_clauseを指定すると、指定されたしきい値を超える索引構成表のデータ行を、この句で指定したデータ・セグメントに格納できます。

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

  • OVERFLOWキーワードの後の句に指定するすべての物理属性および記憶特性は、表のオーバーフロー・セグメントにのみ適用されます。索引構成表自体の物理属性と記憶特性、すべてのパーティションに対するデフォルト値、および各パーティションに対する値は、このキーワードの前に指定する必要があります。

  • 索引構成表に1つ以上のLOB列が含まれる場合は、LOBが表内に格納できるほど小さい場合でも、OVERFLOWを指定しないと、表外に格納されます。

  • がパーティション化されている場合、オーバーフロー・データ・セグメントが主キー索引セグメントと同一レベルでパーティション化されます。

INCLUDING column_name 索引構成表の行を索引部分とオーバーフロー部分に分割する列を指定します。主キー列は常に索引に格納されます。column_nameは、最後の主キー列でも主キー以外の列でもかまいません。column_nameに続くすべての主キー以外の列は、オーバーフロー・データ・セグメントに格納されます。

column_nameで行を分割しようとした場合に、行の索引部分のサイズが、PCTTHRESHOLDの指定値またはデフォルト値を超えると、PCTTHRESHOLDの値に基づいて、行は切り離されます。

INCLUDING句の制限事項: 索引構成表の個々のパーティションにこの句は指定できません。

external_table_clause

external_table_clauseを使用すると、外部表を作成できます。外部表は読取り専用の表であり、そのメタデータはデータベースに格納されますが、データはデータベースの外部に格納されます。特に重要な機能として、外部表では、最初にデータベースにデータをロードしなくても、データを問い合せることができます。


関連項目:

外部表の使用方法の詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』『Oracle Database管理者ガイド』および『Oracle Databaseユーティリティ』を参照してください。

外部表の場合、データベースにデータが存在しないため、表の作成時に通常は使用可能な句の小規模のサブセットを定義します。

  • relational_properties句内では、columnおよびdatatypeのみを指定できます。

  • physical_properties_clause内では、表の構成(ORGANIZATION EXTERNAL external_table_clause)のみを指定できます。

  • table_properties句内では、parallel_clauseのみを指定できます。parallel_clauseを使用すると、外部データに対する後続の問合せおよび外部表を移入する後続の操作をパラレル化できます。

  • 外部表は、作成時にAS subquery句を使用することによって移入できます。

同じCREATE TABLE文で他の句を指定することはできません。


関連項目:


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

  • 外部表を一時表にすることはできません。

  • 外部表には制約を指定できません。

  • 外部表に仮想列を含めることはできません。

  • 外部表にオブジェクト型、VARRAYまたはLONG列を含めることはできません。ただし、内部データベース表のVARRAYまたはLONGデータを外部表のLOB列に移入することはできます。

  • 外部表には、INVISIBLEの列を格納できません。

TYPE TYPE access_driver_typeを指定すると、外部表のアクセス・ドライバを指定できます。アクセス・ドライバは、データベースに対する外部データを解析するAPIです。Oracle Databaseでは、ORACLE_LOADERおよびORACLE_DATAPUMPの2つのアクセス・ドライバが提供されています。TYPEを指定しない場合、デフォルトのアクセス・ドライバORACLE_LOADERが使用されます。AS subquery句を指定して1つのOracle Databaseからデータをアンロードし、同じ、または異なるOracle Databaseに再ロードする場合、ORACLE_DATAPUMPアクセス・ドライバを指定する必要があります。


関連項目:

ORACLE_LOADERおよびORACLE_DATAPUMPアクセス・ドライバの詳細は、『Oracle Databaseユーティリティ』を参照してください。

DEFAULT DIRECTORY DEFAULT DIRECTORYを指定すると、外部データソースが存在するファイル・システムのディレクトリに対応するデフォルト・ディレクトリ・オブジェクトを1つ指定できます。デフォルト・ディレクトリは、アクセス・ドライバから使用でき、エラー・ログなどの補助ファイルを格納できます。

ACCESS PARAMETERS オプションのACCESS PARAMETERS句を指定すると、その外部表用の特定のアクセス・ドライバのパラメータに値を割り当てることができます。

  • opaque_format_spec句は、ORACLE_LOADERおよびORACLE_DATAPUMPアクセス・ドライバのすべてのアクセス・パラメータを指定します。これらのパラメータの詳細は、『Oracle Databaseユーティリティ』を参照してください。

    opaque_format_specで指定するフィールド名は、表定義の列と一致している必要があります。表定義の列と一致していないopaque_format_specのフィールドは無視されます。

  • USING CLOB subqueryを指定すると、副問合せを使用して、パラメータおよびその値を導出できます。副問合せには、集合演算子またはORDER BY句を含めません。CLOBデータ型の1つの項目を含む単一行を戻します。

opaque_format_specでパラメータを指定するか、副問合せを使用してそれらを導出するかに関係なく、この句は解析されません。この情報は、外部データに照らしてアクセス・ドライバによって解析されます。

LOCATION LOCATION句を使用すると、1つ以上の外部データソースを指定できます。通常、location_specifierはファイルですが、ファイル以外も指定できます。Oracle Databaseでは、この句は解析されません。この情報は、外部データに照らしてアクセス・ドライバによって解析されます。

REJECT LIMIT REJECT LIMIT句を指定すると、Oracle Databaseエラーが戻され、問合せが異常終了するまでに、外部データの問合せで許容される変換エラーの数を指定できます。デフォルト値は0(ゼロ)です。

CLUSTER句

CLUSTER句は、表がclusterの一部であることを示します。この句で指定する各列は、クラスタの各列に対応する表の列となります。一般に、表のクラスタ列は、主キーまたは主キーの一部を構成する1つ以上の列です。詳細は、「CREATE CLUSTER」を参照してください。

クラスタ・キー内の列ごとに表から1つの列を指定します。列は、名前ではなく位置で一致させます。

クラスタ表はクラスタの領域割当てを使用します。このため、PCTFREEPCTUSEDまたはINITRANSパラメータ、TABLESPACE句またはstorage_clauseCLUSTER句とともに使用しないでください。

クラスタ表の制限事項: クラスタ表には、次の制限事項があります。

  • オブジェクト表、およびLOB列またはOracleが提供するAny*型の列を含む表はクラスタの一部にはできません。

  • クラスタの一部である表にparallel_clauseCACHEまたはNOCACHEは指定できません。

  • クラスタが同じROWDEPENDENCIESまたはNOROWDEPENDENCIES設定で作成されていないかぎり、CLUSTERROWDEPENDENCIESまたはNOROWDEPENDENCIESとともに指定することはできません。

  • クラスタ表には、INVISIBLEの列を格納できません。

table_properties

table_propertiesを使用すると、表の特性をさらに詳しく定義できます。

column_properties

column_properties句を使用すると、列の記憶域属性を指定できます。

object_type_col_properties

object_type_col_propertiesを使用すると、オブジェクト列、属性、あるいは列または属性の集合要素の記憶特性を指定できます。

column columnには、オブジェクト列または属性を指定します。

substitutable_column_clause substitutable_column_clauseを使用すると、同じ階層のオブジェクト列または属性が互いに置換可能かどうかを指定できます。列が特定の型であるか、サブタイプのインスタンスを含むものであるか、またはその両方を指定できます。

  • ELEMENTを指定すると、コレクション列または属性の要素型が宣言した型のサブタイプに制約されます。

  • IS OF [TYPE] (ONLY type)句を指定すると、オブジェクト列の型が宣言した型のサブタイプに制約されます。

  • NOT SUBSTITUTABLE AT ALL LEVELSを指定すると、オブジェクト列がサブタイプに対応するインスタンスを持つことはできないことを指定できます。また、置換は、埋込みオブジェクト属性、埋込みのネストした表およびVARRAYの要素には使用できません。デフォルトは、SUBSTITUTABLE AT ALL LEVELSです。

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

  • この句は、オブジェクト列の属性には指定できません。ただし、オブジェクト表自体の代替性が設定されていない場合、リレーショナル表におけるオブジェクト型の列およびオブジェクト表のオブジェクト列に対してこの句を指定できます。

  • コレクション型の列の場合、この句で指定できる部分は[NOT] SUBSTITUTABLE AT ALL LEVELSのみです。

LOB_storage_clause

LOB_storage_clauseを使用すると、LOBデータ・セグメントの記憶域属性を指定できます。STORE ASキーワードの後に、1つ以上の句を指定する必要があります。複数の句を指定する場合は、構文図で上から下に表示されている順に指定する必要があります。

非パーティション表の場合、この句は、表のLOBデータ・セグメントの記憶域属性を指定します。

パーティション表の場合、この句は指定した位置に応じて実装されます。

  • 表レベルで指定されたパーティション表の場合(パーティション句とともにphysical_properties句で指定した場合)、この句は、各パーティションまたはサブパーティションに関連付けられたLOBデータ・セグメントに対するデフォルト記憶域属性を指定します。この記憶域属性は、パーティションまたはサブパーティション・レベルでLOB_storage_clauseによって上書きされないかぎり、すべてのパーティションまたはサブパーティションに適用されます。

  • パーティション表の各パーティションの場合(table_partition_descriptionの一部として指定した場合)、この句は、そのパーティションのデータ・セグメントの記憶域属性、またはこのパーティションのサブパーティションのデフォルト記憶域属性を指定します。パーティション・レベルのLOB_storage_clauseは、表レベルのLOB_storage_clauseを上書きします。

  • パーティション表の各サブパーティションの場合(subpartition_by_hashまたはsubpartition_by_listの一部として指定した場合)、この句は、サブパーティションのデータ・セグメントの記憶域属性を指定します。サブパーティション・レベルのLOB_storage_clauseは、パーティション・レベルおよび表レベルのLOB_storage_clausesを上書きします。

LOB_storage_clauseの制限事項: サブパーティションでLOB_storage_clauseを指定する場合は、TABLESPACE句のみが許可されています。


関連項目:

  • サイズがGBになるLOBを作成する場合のガイドラインを含むLOBの詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。

  • 「表の作成: LOB列の例」


LOB_item

表の表領域および記憶特性とは異なる表領域および記憶特性を明示的に定義する場合に、そのLOB列名またはLOBオブジェクト属性を指定します。作成する各LOB_itemに、システム管理された索引が自動的に作成されます。

SECUREFILE | BASICFILE

この句を使用して、LOB記憶域のタイプに、高パフォーマンスのLOB (SecureFiles)または従来のLOB (BasicFiles)を指定します。


関連項目:

SecureFiles LOBの詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。


注意:

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

LOB_segname

LOBデータ・セグメントの名前を指定します。LOB_itemが複数指定されている場合は、LOB_segnameを使用できません。

LOB_storage_parameters

LOB_storage_parameters句を使用すると、様々なLOB記憶域の要素を指定できます。

TABLESPACE句 この句を使用すると、LOBデータが格納される表領域を指定します。

storage_clause  storage_clauseを使用すると、LOBセグメント記憶域の様々な側面を指定できます。LOB記憶域に関して特に重要なのは、storage_clauseMAXSIZE句です。これは、LOB_parametersLOB_retention_clauseと組み合せて使用できます。詳細は、storage_clauseを参照してください。

LOB_parameters

LOB記憶域にSecureFileを使用する場合、いくつかのLOB_parametersは不要になります。PCTVERSIONおよびFREEPOOLSパラメータは、BasicFiles LOB記憶域を使用する場合にのみ有効かつ有用です。

ENABLE STORAGE IN ROW  行の記憶域を使用可能にした場合、LOB値の長さが、約4000バイトからシステム制御情報分を引いた長さより小さければ、LOB値が表内に格納されます。これはデフォルトです。

行の記憶域を使用可能にする場合の制限事項: index_org_table_clauseOVERFLOWセグメントを指定しないかぎり、索引構成表に対して、このパラメータを指定できません。

DISABLE STORAGE IN ROW  行の記憶域を使用禁止にした場合、LOB値の長さに関係なく、LOB値は表外(行の外側)に格納されます。

LOB値が格納されている場所にかかわらず、LOBロケータは、常に表内に格納されます。STORAGE IN ROWの値は、一度設定すると、表を移動しないかぎり、変更できません。詳細は、「ALTER TABLE」のmove_table_clauseを参照してください。

CHUNK integer  LOBの操作用に割り当てるバイト数を指定します。integerにデータベースのブロック・サイズの倍数を指定しなかった場合、自動的に次に大きい倍数(バイト単位)に切り上げられます。たとえば、データベースのブロック・サイズが2048バイトのときにintegerに2050を指定すると、4096バイト(2ブロック)が割り当てられます。最大値は32768(32KB)で、これがOracle Databaseのブロック・サイズとして使用できる最も大きな値です。デフォルトのCHUNKサイズは、Oracleでの1データベース・ブロックです。

CHUNKの値は、NEXTの値(デフォルト値またはstorage_clauseで指定された値)以下である必要があります。CHUNKの値がNEXTの値を超えると、エラーが戻ります。CHUNKの値は、一度設定すると変更できません。

PCTVERSION integer  

LOBの記憶域全体のうち、旧バージョンのLOBの保持に使用される割合(パーセント)の最大値を指定します。データベースが手動UNDOモードで実行されている場合、デフォルト値は10です。この場合、LOB記憶域全体の10%が消費されるまで、旧バージョンのLOBデータは上書きされません。

データベースが手動UNDOモードと自動UNDOモードのどちらで稼働されていても、PCTVERSIONパラメータを指定できます。PCTVERSIONは、手動UNDOモードのデフォルト値です。RETENTIONは、自動UNDOモードのデフォルト値です。PCTVERSIONRETENTIONの両方は指定できません。

この句は、SECUREFILEを指定した場合は無効です。SECUREFILEPCTVERSIONの両方を指定した場合、PCTVERSIONパラメータは特に警告もなく無視されます。

LOB_retention_clause  この句を使用すると、LOBセグメントを保持する用途に、フラッシュバック、読取り一貫性、その両方、またはどちらでもないを指定できます。

データベースが自動UNDOモードで稼働している場合にのみ、RETENTIONパラメータを使用できます。データベースに保持されるコミット済のUNDOデータの量は、UNDO_RETENTION初期化パラメータの値を使用して決定されます。自動UNDOモードでは、PCTVERSIONを指定しないかぎり、RETENTIONがデフォルト値となります。PCTVERSIONRETENTIONの両方は指定できません。

SecureFileを使用している場合にのみ、RETENTIONの後にオプションの設定を指定できます。LOB_storage_clauseSECUREFILEパラメータは、データベースがSecureFileを使用して記憶域を動的に管理することを示します。データベースのUNDOモードなどの要因が考慮されます。

  • MAX: LOBセグメントがMAXSIZEに達するまでUNDOを保持するように指定します。MAXを指定する場合は、storage_clauseMAXSIZE句も指定する必要があります。

  • MIN: データベースがフラッシュバック・モードで、特定のLOBセグメントのUNDO保存期間n秒に制限する場合に指定します。

  • AUTO: 読取り一貫性に必要十分なUNDOを保持します。

  • NONE: 読取り一貫性またはフラッシュバックのどちらにもUNDOが必要ない場合に指定します。

RETENTIONパラメータを指定しないか、オプションの設定なしでRETENTIONを指定すると、RETENTIONDEFAULTに設定されます。この機能はAUTOと同等です。


関連項目:

  • SecureFileを使用して簡略化されたLOB記憶域の詳細は、「CREATE TABLE」のLOB_storage_parameters句を参照してください。

  • SecureFileの使用の詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。

  • データベースをフラッシュバック・モードにする方法については、「ALTER DATABASE」のflashback_mode_clauseを参照してください。

  • 「UNDO表領域の作成例:」


FREEPOOLS integer  LOBセグメントに対する空きリストのグループ数を指定します。通常、integerは、Oracle Real Application Clusters環境のインスタンス数です。単一インスタンス・データベースの場合、この値は1になります。

データベースが自動UNDOモードで稼働している場合にのみ、このパラメータを指定できます。自動UNDOモードでは、storage_clauseFREELIST GROUPSパラメータを指定しないかぎり、FREEPOOLSがデフォルト値になります。FREEPOOLSFREELIST GROUPSのどちらも指定しない場合、データベースが自動UNDO管理モードで稼働している場合はFREEPOOLS 1のデフォルト値が使用され、手動UNDO管理モードで稼働している場合はFREELIST GROUPS 1のデフォルト値が使用されます。

この句は、SECUREFILEを指定した場合は無効です。SECUREFILEFREEPOOLSの両方を指定した場合、FREEPOOLSパラメータは特に警告もなく無視されます。

FREEPOOLSの制限事項: storage_clauseでは、FREEPOOLSおよびFREELIST GROUPSパラメータを指定できません。

LOB_deduplicate_clause  この句は、SecureFiles LOBに対してのみ有効です。LOB_deduplicate_clauseを使用すると、重複するLOBデータを除外する、LOBの重複の除外を有効または無効にできます。

DEDUPLICATEキーワードは、LOBの重複コピーを除外するようデータベースに対して指定します。セキュアなハッシュ索引を使用して重複を検出すると、同じ内容を持つLOBは単一のコピーに結合され、消費される記憶域が削減されて記憶域の管理が簡素化されます。

この句を指定しない場合、デフォルトでは、LOBの重複除外は無効です。

この句は、LOBセグメント全体に対して、LOBの重複除外を実装します。個々のLOBに対して重複除外を有効または無効にするには、DBMS_LOB.SETOPTIONSプロシージャを使用します。


関連項目:

LOBの重複除外の詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。DBMS_LOBパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

LOB_compression_clause  この句は、BasicFiles LOBではなく、SecureFiles LOBに対してのみ有効です。LOB_compression_clauseを使用すると、サーバー側のLOB圧縮を有効または無効にすることをデータベースに指定できます。サーバー側の圧縮されたLOBセグメントで、ランダムな読取り/書込みアクセスが可能です。LOB圧縮は、表の圧縮または索引の圧縮からは独立しています。この句を指定しない場合、NOCOMPRESSがデフォルトになります。

HIGHMEDIUMまたはLOWを指定して、圧縮の程度を変更できます。圧縮の程度をHIGHにすると、待機時間はMEDIUMよりも長くなりますが、圧縮率は高くなります。LOWを指定すると、HIGHまたはMEDIUMのいずれの場合よりも圧縮率がわずかに低くなるものの、解凍および圧縮の処理速度が大幅に向上します。このオプションのパラメータを指定しない場合、MEDIUMがデフォルトになります。

この句は、LOBセグメント全体のサーバー側のLOB圧縮を実装します。個々のLOBの圧縮を有効または無効にするには、DBMS_LOB.SETOPTIONSプロシージャを使用します。


関連項目:

サーバー側のLOB記憶域の詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。提供されているパッケージUTL_COMPRESSを使用したクライアント側のLOB圧縮およびDBMS_LOBパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

ENCRYPT | DECRYPT  これらの句は、LOB記憶域にSecureFileを使用しているLOBに対してのみ有効です。ENCRYPTを指定すると、列内のすべてのLOBを暗号化できます。DECRYPTを指定すると、LOBをクリアテキストで保持できます。この句を指定しない場合、DECRYPTがデフォルトになります。

この句の概要は、encryption_specを参照してください。LOB列に適用するとencryption_specは個々のLOB列固有になるため、他のLOB列や他の非LOB列とは、暗号化アルゴリズムが異なる場合があります。column_definitionの一部としてencryption_specを使用すると、LOB列全体を暗号化できます。table_partition_descriptionLOB_storage_clauseの一部としてencryption_specを使用すると、LOBパーティションを暗号化できます。

LOBのencryption_specの制限事項: LOB暗号化に対しては、encryption_specSALTまたはNO SALT句を指定できません。


関連項目:

LOB暗号化の詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。DBMS_LOBパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

CACHE | NOCACHE | CACHE READS この句は、LOB記憶域だけでなく、セグメント記憶域全般に関連します。この句の詳細は、「CACHE | NOCACHE | CACHE READS」を参照してください。

LOB_partition_storage

LOB_partition_storage句を使用すると、各パーティションに、別のLOB_storage_clauseまたはvarray_col_propertiesを指定できます。パーティションは、その位置の順に指定してください。パーティションの順番を確認するには、USER_IND_PARTITIONSビューのPARTITION_NAMEおよびPARTITION_POSITION列を問い合せます。

特定のパーティションに、LOB_storage_clauseまたはvarray_col_properties句を指定しなかった場合、表レベルでLOB項目に指定された記憶特性が設定されます。表のレベルでもLOB項目に記憶特性を指定しなかった場合、LOBデータ・パーティションは、対応する表パーティションと同じ表領域に格納されます。

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

  • LOB_storage_clauseLOB_parametersでは、encryption_specを指定できません。パーティションおよびサブパーティションに対する暗号化アルゴリズムの指定は無効であるためです。

  • ハッシュ・パーティションおよびすべてのタイプのサブパーティションには、TABLESPACE句のみ指定できます。

varray_col_properties

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

  • 非パーティション表の場合(パーティション句なしでphysical_properties句に指定した場合)、この句は、VARRAYのLOBデータ・セグメントの記憶域属性を指定します。

  • 表レベルで指定されたパーティション表の場合(パーティション句とともにphysical_properties句で指定した場合)、この句は、各パーティション(またはサブパーティション)に対応付けられたVARRAYのLOBデータ・セグメントに対するデフォルト記憶域属性を指定します。

  • パーティション表の各パーティションの場合(table_partition_descriptionの一部として指定した場合)、この句は、そのパーティションのVARRAYのLOBデータ・セグメントの記憶域属性、またはこのパーティションのサブパーティションにあるVARRAYのLOBデータ・セグメントのデフォルト記憶域属性を指定します。パーティション・レベルのvarray_col_propertiesは、表レベルのvarray_col_propertiesを上書きします。

  • パーティション表の各サブパーティションの場合(subpartition_by_hashまたはsubpartition_by_listの一部として指定した場合)、この句は、このサブパーティションのVARRAYデータ・セグメントの記憶域属性を指定します。サブパーティション・レベルのvarray_col_propertiesは、パーティション・レベルおよび表レベルのvarray_col_propertiesを上書きします。

STORE AS [SECUREFILE | BASICFILE] LOB句 STORE AS LOBを指定したときに実行される処理は、次のとおりです。

  • VARRAYの最大サイズが約4000バイト未満で、行の記憶域を使用禁止にしていない場合、VARRAYは表内LOBに格納されます。

  • VARRAYの最大サイズが約4000バイトを超える場合または行の記憶域を使用禁止にしている場合、VARRAYは表外LOBとして格納されます。

STORE AS LOBを指定しなかった場合、記憶域は、VARRAY列の実際のサイズではなく、VARRAYの最大サイズに基づいて決定されます。VARRAYの最大サイズは、要素数×要素サイズ+システム制御情報分の容量です。この句を指定しない場合、次のようになります。

  • VARRAYの最大サイズが約4000バイト未満の場合、VARRAYはLOBとしてではなく表内データとして格納されます。

  • 最大サイズが約4000バイトを超える場合、VARRAYは常にLOBとして格納されます。

    • 実際のサイズが約4000バイト未満の場合、VARRAYは表内LOBとして格納されます。

    • 実際のサイズが約4000バイトを超える場合、VARRAYは表外LOBとして格納されます。これはその他のLOB列でも同様です。

substitutable_column_clause substitutable_column_clauseの動作は、object_type_col_propertiesの場合と同じです。

VARRAY列のプロパティの制限事項  この句は、時間隔パーティション表に対して指定することはできません。

nested_table_col_properties

nested_table_col_propertiesを使用すると、ネストした表に対して別々の記憶特性を指定し、そのネストした表を索引構成表として定義できるようになります。この句で特に明示的に指定しないかぎり、記憶表は次のとおり作成されます。

  • 非パーティション表の場合、記憶表は親表と同じスキーマおよび同じ表領域内に作成されます。

  • パーティション表の場合、記憶表はスキーマのデフォルトの表領域内に作成されます。デフォルトでは、ネストした表はパーティション実表でパーティション化されます。

  • どちらの場合も、記憶表ではデフォルトの記憶特性が使用され、この表の作成の基になった列のネストした表の値が格納されます。

ネストした表の型を持つ列または列属性付きで表を作成する場合は、この句を挿入する必要があります。nested_table_col_properties句内で、親表に対する場合と同じ働きをする句については、ここでは説明しません。

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

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


関連項目:

nested_itemおよびCOLUMN_VALUEの使用例は、「表の作成: マルチレベル・コレクションの例」を参照してください。

LOCAL | GLOBAL LOCALを指定すると、ネストした表を実表と同一レベルでパーティション化できます。これはデフォルトです。ネストしたパーティション表のローカル・パーティション索引は自動的に作成されます。

ネストした表が、パーティション実表のネストした非パーティション表であることを示すには、GLOBALを指定します。

storage_table nested_itemの行を含む表の名前を指定します。

storage_tableに対して問合せやDML文を直接実行することはできませんが、その記憶特性は、ALTER TABLE文で名前を指定することによって変更できます。


関連項目:

ネストした表の列に対する記憶特性の変更方法については、「ALTER TABLE」を参照してください。

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

  • VALUEは、ネストした表自体のコピーを戻します。

  • LOCATORは、ネストした表のコピーに対するコレクション・ロケータを戻します。

    ロケータの有効範囲は1つのセッションであり、複数のセッションにわたって使用できません。LOBロケータとは異なり、コレクション・ロケータはコレクション・インスタンスの変更に使用できません。

segment_attributes_clauseまたはLOB_storage_clauseを指定しない場合、ネストした表はヒープ構成され、デフォルトの記憶特性で作成されます。

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

  • この句は、一時表には指定できません。

  • この句は、時間隔パーティション表には指定できません。

  • oid_clauseは指定できません。

  • 作成時、object_propertiesを使用して、out_of_line_ref_constraintinline_ref_constraintまたはネストした表の属性に対する外部キー制約を指定することはできません。ただし、ALTER TABLEを使用してネストした表を修正し、これらの制約を追加できます。


関連項目:


XMLType_column_properties

XMLType_column_propertiesを指定すると、XMLTYPE列に対する記憶域属性を指定できます。

XMLType_storage XMLTypeデータは、バイナリXML、CLOBまたはオブジェクト・リレーショナル列に格納できます。

  • BINARY XMLを指定すると、縮小されたバイナリXML書式でXMLデータを格納できます。

    指定したLOBパラメータは、バイナリXMLエンコード値を格納するために作成された、基礎となるBLOB列に適用されます。

    以前のリリースでは、バイナリXMLデータはデフォルトでBasicFiles LOBに格納されます。Oracle Database 11gリリース2 (11.2.0.2)以降では、COMPATIBLE初期化パラメータが11.2以上の場合にBASICFILEまたはSECUREFILEを指定しないと、バイナリXMLデータは可能なかぎりSecureFiles LOBに格納されます。SecureFiles LOB記憶域を使用できない場合、バイナリXMLデータはBasicFiles LOBに格納されます。これは、次のいずれかの場合に発生します。

    • XMLType表の表領域で、自動セグメント領域管理が使用されていない。

    • init.oraファイルの設定により、SecureFiles LOB記憶域が使用できない。例については、『Oracle Databaseリファレンス』DB_SECUREFILEパラメータを参照してください。

  • CLOBを指定すると、CLOB列にXMLTypeデータを格納できます。CLOB列にデータを格納すると、元の内容が保持されるため、検索時間が短縮されます。

    LOB記憶域を定義する場合、LOBパラメータとXMLSchema_spec句のいずれかを指定できますが、両方は指定できません。XMLSchema_spec句を指定すると、特定のスキーマ・ベースのXMLインスタンスに表や列を制限できます。

    この句でBASICFILEまたはSECUREFILEを指定しないと、CLOB列はBasicFiles LOBに格納されます。


    注意:

    XMLTypeデータをCLOB列に格納しないことをお薦めします。XMLTypeCLOB記憶域は非推奨になっています。かわりにXMLTypeのバイナリXML記憶域を使用してください。

  • OBJECT RELATIONALを指定すると、オブジェクト・リレーショナル列にXMLTypeデータを格納できます。データ・オブジェクトをリレーショナルに格納すると、リレーショナル列に索引を定義できるため、問合せのパフォーマンスが向上します。

    オブジェクト・リレーショナル形式での格納を指定する場合、XMLSchema_spec句も指定する必要があります。

ALL VARRAYS AS句を使用すると、XMLType列にすべてのVARRAYを格納できます。

以前のリリースでは、XMLTypeデータはデフォルトでBasicFiles LOBのCLOB列に格納されます。Oracle Database 11gリリース2 (11.2.0.2)以降では、COMPATIBLE初期化パラメータが11.2以上の場合にXMLType_storage句を指定しないと、XMLTypeデータはSecureFiles LOBのバイナリXML列に格納されます。SecureFiles LOB記憶域を使用できない場合は、BasicFiles LOBのバイナリXML列に格納されます。


関連項目:

SecureFiles LOBの詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。

XMLSchema_spec  

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


関連項目:

  • LOB_segnameおよびLOB_parameters句の詳細は、LOB_storage_clauseを参照してください。

  • オブジェクト・リレーショナル表におけるXMLType列の例は、「XMLType列の例:」を参照してください。XMLスキーマの作成例は、「SQL文でのXMLの使用方法」を参照してください。

  • XMLType列と表およびXMLスキーマの作成の詳細は、『Oracle XML DB開発者ガイド』を参照してください。

  • DBMS_XMLSCHEMAパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。


XMLType_virtual_columns

この句は、バイナリXML記憶域のXMLType表に対してのみ有効です。この記憶域は、XMLType_storage句で指定します。VIRTUAL COLUMNS句を指定して、仮想列を定義します。仮想列は、ファンクション索引または制約の定義で使用できます。そのような仮想列には表の作成時には制約を定義できませんが、その後、ALTER TABLE文を使用して制約を列に追加できます。


関連項目:

XML環境でこの句を使用する方法の例は、『Oracle XML DB開発者ガイド』を参照してください。

indexing_clause

indexing_clauseは、パーティション表に対してのみ有効です。この句を使用すると、表、表パーティション、または表サブパーティションに対して索引付けプロパティを設定できます。

  • INDEXING ONを指定すると、索引付けプロパティをONに設定できます。これはデフォルトです。

  • INDEXING OFFを指定すると、索引付けプロパティをOFFに設定できます。

この索引付けプロパティにより、表のパーティションとサブパーティションが、表の部分索引に含まれるかどうかが決まります。

  • 単純なパーティション表の場合、索引付けプロパティがONのパーティションは、その表の部分索引に含まれます。索引付けプロパティがOFFのパーティションは除外されます。

  • コンポジット・パーティション表の場合、索引付けプロパティがONのサブパーティションは、その表の部分索引に含まれます。索引付けプロパティがOFFのサブパーティションは除外されます。

indexing_clauseは、表レベル、パーティション・レベル、またはサブパーティション・レベルで指定できます。indexing_clauseを表レベルでtable_properties句内に指定すると、その表のデフォルトの索引付けプロパティを設定することになります。データベースが自動的に作成する時間隔パーティションは、常に表のデフォルトの索引付けプロパティを継承します。その他のタイプのパーティションおよびサブパーティションは、次のようにデフォルトの索引付けプロパティを継承します。

  • 単純なパーティション表の場合、パーティションはその表のデフォルトの索引付けプロパティを継承します。この動作は、次のように、パーティションごとにindexing_clauseを指定することで上書きできます。

    • レンジ・パーティションの場合は、range_partitions句のtable_partition_descriptionで指定します。

    • ハッシュ・パーティションの場合は、hash_partitions句のindividual_hash_partitions句で指定します。

    • リスト・パーティションの場合は、list_partitions句のtable_partition_descriptionで指定します。

    • 参照パーティションの場合は、reference_partitioning句のreference_partition_desc句のtable_partition_descriptionで指定します。

    • システム・パーティションの場合は、system_partitioning句のreference_partition_desc句のtable_partition_descriptionで指定します。

  • コンポジット・パーティション表の場合、サブパーティションはその表のデフォルトの索引付けプロパティを継承します。この動作は、パーティションまたはサブパーティションごとにindexing_clauseを指定することで上書きできます。

    次のように、パーティションにindexing_clauseを指定すると、サブパーティションはそのパーティションの索引付けプロパティを継承します。

    • コンポジット・レンジ・パーティションの場合は、composite_range_partitions句のtable_partition_descriptionで指定します。

    • コンポジット・ハッシュ・パーティションの場合は、composite_hash_partitions句のindividual_hash_partitions句で指定します。

    • コンポジット・リスト・パーティションの場合は、composite_list_partitions句のtable_partition_descriptionで指定します。

    サブパーティションの索引付けプロパティは、次のように、そのサブパーティションにindexing_clauseを指定することで設定できます。

    • レンジ・サブパーティションの場合は、composite_range_partitions句のrange_subpartition_desc句で指定します。

    • ハッシュ・サブパーティションの場合は、composite_hash_partitions句のindividual_hash_subparts句で指定します。

    • リスト・サブパーティションの場合は、composite_list_partitions句のlist_subpartition_desc句で指定します。


関連項目:

表、表パーティション、または表サブパーティションの索引付けプロパティを確認する方法の詳細は、『Oracle Databaseリファレンス』を参照してください。
  • 表のデフォルトの索引付けプロパティを確認するには、*_PART_TABLESビューのDEF_INDEXING列を問い合せます。

  • 表パーティションの索引付けプロパティを確認するには、*_TAB_PARTITIONSビューのINDEXING列を問い合せます。

  • 表サブパーティションの索引付けプロパティを確認するには、*_TAB_SUBPARTITIONSビューのINDEXING列を問い合せます。


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

  • indexing_clauseは、非パーティション表には指定できません。

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


関連項目:

部分索引の詳細は、CREATE INDEX「partial_index_clause」を参照してください。

table_partitioning_clauses

table_partitioning_clausesを使用すると、パーティション表を作成できます。

一般的なパーティション化の注意事項: すべてのタイプのパーティション化には、次の注意事項があります。

  • 指定できるパーティションとサブパーティションの合計は1024K-1です。

  • パーティションが1つのみのパーティション表も作成できます。パーティションが1つの表は、非パーティション表とは異なります。たとえば、非パーティション表にはパーティションを追加できません。

  • すべての表とLOBパーティションおよびすべての表とLOBサブパーティションに名前を指定できますが、必須ではありません。名前を省略すると、次のように名前が生成されます。

    • パーティション名を省略すると、SYS_Pnの形式で名前が生成されます。LOBデータおよびLOB索引パーティションに対するシステム生成名は、それぞれSYS_LOB_PnおよびSYS_IL_Pnの形式をとります。

    • subpartition_templateでサブパーティション名を指定すると、そのテンプレートで作成される各サブパーティションに対して、パーティション名とテンプレートのサブパーティション名を連結して名前が生成されます。LOBサブパーティションの場合、生成されるLOBサブパーティション名は、パーティション名とテンプレートのLOBセグメント名の連結です。どちらの場合も、連結の結果が30文字を超える場合は、エラーが戻されて文は失敗します。

    • 個々のサブパーティションを指定するときにサブパーティション名を指定せず、subpartition_templateを指定していない場合、SYS_SUBPnという形式で名前が生成されます。LOBデータおよび索引サブパーティションに対する、対応するシステム生成名は、それぞれSYS_LOB_SUBPnおよびSYS_IL_SUBPnです。

  • 表領域の記憶域は、CREATE TABLE文で、表セグメントとLOBセグメントの両方に対して様々なレベルで指定できます。表領域数は、パーティション数またはサブパーティション数と同じである必要はありません。パーティション数またはサブパーティション数が表領域数より多い場合は、表領域名が繰り返し使用されます。

    データベースでは、表領域の記憶域を、次の順序で(優先度の高いものから順に)評価します。

    • 個々の表サブパーティションまたはLOBサブパーティション・レベルで指定された表領域の記憶域が、最も優先度が高くなります。次に、subpartition_templateでパーティションまたはLOBに対して指定された記憶域です。

    • 個々の表パーティションまたはLOBパーティション・レベルで指定された表領域の記憶域。ここで指定された記憶域パラメータは、subpartition_templateよりも優先します。

    • 表に対して指定された表領域の記憶域

    • ユーザーに対して指定されたデフォルトの表領域の記憶域

  • デフォルトでは、ネストした表はパーティション実表でパーティション化されます。

一般的なパーティション化の制限事項: すべてのパーティション化には、次の制限事項があります。

  • クラスタの一部である表は、パーティション化できません。

  • ネストした表をパーティション化したり、索引構成表として定義されているVARRAYをパーティション化することはできません。

  • LONGまたはLONG RAW列を含む表は、パーティション化できません。

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

range_partitions

range_partitions句を使用すると、列リストの値の範囲で表をパーティション化できます。索引構成表の場合、列リストは表の主キー列のサブセットである必要があります。

column

行がどのパーティションに属するかを判断するために使用される、列の順序リストを指定します。これらの列は、パーティション化キーです。仮想列とINVISIBLEの列は、パーティション化キー列として指定できます。

INTERVAL句

この句を使用すると、表の時間隔パーティションを設定できます。時間隔パーティションは、数値範囲または日時期間に基づくパーティションです。表に挿入されたデータがすべてのレンジ・パーティションを超える場合に、指定されたレンジまたは期間のパーティションを自動的に作成することをデータベースに指定することによって、レンジ・パーティション化を拡張します。

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

  • オプションのSTORE IN句を使用して、時間隔パーティション・データが格納される1つ以上の表領域を指定できます。

  • また、range_partitionsPARTITION句を使用して、1つ以上のレンジ・パーティションを指定する必要があります。レンジ・パーティション・キーの値によって、遷移ポイントと呼ばれるレンジ・パーティションの上限が決まります。その遷移ポイントを超えるデータに対して時間隔パーティションが作成されます。

時間隔パーティション化の制限事項: INTERVAL句には、「一般的なパーティション化の制限事項:」および「レンジ・パーティション化の制限事項:」に示されている制限事項があります。次の追加の制限が適用されます。

  • パーティション化キー列は1つのみ指定でき、NUMBER型、DATE型、FLOAT型またはTIMESTAMP型である必要があります。

  • この句は索引構成表ではサポートされていません。

  • この句は、ネストした表の列やVARRAY列を含む表に対してはサポートされていません。

  • 時間隔パーティションは、サブパーティション・レベルではサポートされていません。

  • シリアル化可能トランザクションは、時間隔パーティションでは動作しません。セグメントが存在しない時間隔パーティション表のパーティションにデータを挿入しようとすると、エラーになります。

  • VALUES句の場合:

    • MAXVALUEは指定できません(無限)。指定すると、必要に応じてパーティションを自動追加するという目的に反するためです。

    • パーティション化キー列にはNULL値を指定できません。


関連項目:

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

PARTITION partition

パーティション名を指定する際、partitionの名前は、スキーマ・オブジェクトのネーミング規則および「データベース・オブジェクトのネーミング規則」にある該当部分の記述に従って指定する必要があります。partitionを省略すると、「一般的なパーティション化の注意事項:」で説明されているように名前が生成されます。

range_values_clause

現行パーティションの上限(境界は含まない)を指定します。値リストは、range_partitions句の列リストに対応するリテラル値を含む順序リストです。値リスト内のリテラルのかわりに、キーワードMAXVALUEを使用できます。MAXVALUEには、常に他の値(NULLを含む)より高位にソートされる最大値を指定します。

パーティション境界の上限にMAXVALUE以外の値を指定した場合、表に暗黙の整合性制約が課せられます。


注意:

DATE列でパーティション化されている場合および日付書式で年の最初の2桁の数字が指定されていない場合、年の「YYYY」4文字書式マスクでTO_DATEファンクションを使用する必要があります。この句では、「RRRR」書式マスクはサポートしていません。日付書式は、NLS_TERRITORYによって暗黙的に決定され、NLS_DATE_FORMATによって明示的に決定されます。これらの初期化パラメータの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。


関連項目:

パーティション・バウンドの詳細は、『Oracle Database概要』を参照してください。また、「レンジ・パーティション化の例:」を参照してください。

table_partition_description

table_partition_descriptionを使用すると、表の物理特性および記憶特性を定義できます。

deferred_segment_creation句、segment_attributes_clauseおよびtable_compression句の機能は、表全体の「physical_properties」と同じです。

indexing_clauseを使用すると、レンジ、リスト、システムまたは参照の表パーティションに索引付けプロパティを設定できます。詳細は、 「indexing_clause」を参照してください。

key_compression句およびOVERFLOW句の機能は、index_org_table_clauseと同じです。

LOB_storage_clause LOB_storage_clauseを使用すると、このパーティションまたはこのパーティションの任意のレンジまたはリスト・サブパーティション内にある1つ以上のLOB項目に対してLOB記憶特性を指定できます。LOB項目にLOB_storage_clauseを指定しない場合、「一般的なパーティション化の注意事項:」で説明されているように、各LOBデータ・パーティションに対する名前が生成されます。

varray_col_properties varray_col_propertiesを使用すると、このパーティション、またはこのパーティションの任意のレンジまたはリスト・サブパーティション内にある1つ以上のVARRAY項目に対して記憶特性を指定できます。

nested_table_col_properties nested_table_col_propertiesを使用すると、このパーティション、またはこのパーティションの任意のレンジまたはリスト・サブパーティション内にある1つ以上のネストした表の記憶域表項目に記憶特性を指定できます。この句に指定した記憶特性は、表レベルで指定したすべての記憶域属性を上書きします。

partitioning_storage_clause

partitioning_storage_clauseを使用すると、ハッシュ・パーティションおよびレンジ、ハッシュおよびリスト・サブパーティションの記憶特性を指定できます。

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

  • OVERFLOW句は、索引構成パーティション表にのみ関連し、individual_hash_partitions句でのみ有効です。レンジ・パーティションやハッシュ・パーティションまたは任意のタイプのサブパーティションには有効ではありません。

  • key_compressionは索引構成表のパーティションにのみ指定できます。COMPRESSまたはNOCOMPRESSを指定できますが、integerで接頭辞の長さを指定できません。

レンジ・パーティション化の制限事項: レンジ・パーティション化には、「一般的なパーティション化の制限事項:」に示されている制限事項があります。次の追加の制限が適用されます。

  • 指定できるパーティション化キー列は16以下です。

  • パーティション化キー列は、CHAR型、NCHAR型、VARCHAR2型、NVARCHAR2型、VARCHAR型、NUMBER型、FLOAT型、DATE型、TIMESTAMP型、TIMESTAMP WITH LOCAL TIMEZONE型またはRAW型である必要があります。

  • VALUES句にNULLを指定することはできません。

hash_partitions

hash_partitions句を使用すると、表がハッシュ方式でパーティション化されるように指定できます。列の値にパーティション化キーとして指定されたハッシュ・ファンクションを使用して、行がパーティションに割り当てられます。個々のハッシュ・パーティションを指定するか、または作成されるハッシュ・パーティションの数を指定できます。

column 行がどのパーティションに属するかを判断するために使用される、列の順序リストを指定します(パーティション化キー)。

individual_hash_partitions  この句を使用すると、個々のパーティションを名前で指定できます。

indexing_clauseを使用すると、ハッシュ・パーティションに索引付けプロパティを設定できます。詳細は、 「indexing_clause」を参照してください。

個々のハッシュ・パーティションを指定する場合の制限事項: partitioning_storage_clauseで指定できる句は、TABLESPACE句および表の圧縮のみです。


注意:

異なるキャラクタ・セットを使用してデータベースを使用しているか、使用する予定がある場合は、キャラクタ列を分割する際に注意してください。文字のソート順序は、すべてのキャラクタ・セットで同一ではありません。キャラクタ・セット・サポートの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

hash_partitions_by_quantity 個々のパーティションを定義するかわりに、ハッシュ・パーティションの数を指定します。この場合、SYS_Pnの形式でパーティション名が割り当てられます。STORE IN句を使用すると、ハッシュ・パーティション・データが格納される1つ以上の表領域を指定できます。表領域の数とパーティションの数が同じである必要はありません。パーティション数が表領域数より多い場合は、表領域名が繰り返し使用されます。

ハッシュ・パーティション化の両方の方法でロード・バランシングを最適化するには、2の累乗のパーティション数を指定します。個々のハッシュ・パーティションを指定する際は、partitioning_storage_clauseTABLESPACEと表の圧縮の両方を指定できます。ハッシュ・パーティションを数で指定する場合は、TABLESPACEのみを指定できます。ハッシュ・パーティションは、その他のすべての属性を表レベルのデフォルトから継承します。

table_compression句の機能は、表のtable_propertiesについて説明されている機能と、ほぼ同じです。

key_compression句およびOVERFLOW句の機能は、index_org_table_clauseと同じです。

表レベルで指定された表領域の記憶域は、パーティション・レベルで指定された表領域の記憶域で上書きされ、パーティション・レベルで指定された表領域の記憶域は、サブパーティション・レベルで指定された表領域の記憶域で上書きされます。

individual_hash_partitions句に含まれるpartitioning_storage_clauseTABLESPACE句は、作成される個々のパーティションのみについて、表領域の記憶域を決定します。hash_partitions_by_quantity句では、STORE IN句によって、表の作成時のパーティションの位置と、後から追加されるパーティションのデフォルトの格納場所が決定されます。


関連項目:

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

ハッシュ・パーティション化の制限事項: ハッシュ・パーティション化には、「一般的なパーティション化の制限事項:」に示されている制限事項があります。次の追加の制限が適用されます。

  • 指定できるパーティション化キー列は16以下です。

  • パーティション化キー列は、CHAR型、NCHAR型、VARCHAR2型、NVARCHAR2型、VARCHAR型、NUMBER型、FLOAT型、DATE型、TIMESTAMP型、TIMESTAMP WITH LOCAL TIMEZONE型またはRAW型である必要があります。

list_partitions

list_partitions句を使用すると、columnのリテラル値のリストで表をパーティション化できます。リスト・パーティション化は、個々の行が固有のパーティションにマップする方法に関する制御に便利です。

list_values_clause 各パーティションのlist_values_clauseでは、1つ以上の値を割り当てる必要があります。複数のパーティションに同じ値(NULLを含む)を割り当てることはできません。リスト・パーティションは、順序付けされていません。

VALUES句のパーティション値にリテラルNULLを指定した場合、後続の問合せで、そのパーティション内のデータにアクセスするには、WHERE句で、比較条件ではなくIS NULL条件を使用する必要があります。

DEFAULTキーワードを指定すると、行の挿入先となるパーティションが作成されます。この行は、別のパーティションにはマップされません。このため、DEFAULTを指定できるのは1つのパーティションのみです。そのパーティションに対して、その他の値を指定することはできません。また、デフォルト・パーティションは、パーティションの中で最後に定義する必要があります。DEFAULTは、レンジ・パーティションでMAXVALUEを使用する場合と同様に使用します。

各パーティションの値のリストを構成する文字列は、最大4KBです。すべてのパーティションの値の総数を、64K-1以下に指定します。

リスト・パーティションのパーティション化キー列は、最大サイズが32,767バイトの拡張データ型列になることがあります。この場合、パーティションに指定する値のリストは、4Kバイトの制限を超過することがあります。この制限を回避するには、次のいずれかの方法を使用します。

  • 4Kバイトの制限を超過する値に、DEFAULTパーティションを使用します。

  • パーティション・キー列でハッシュ・ファンクション(STANDARD_HASHなど)を使用して、4Kバイトよりも短い一意の識別子を作成します。詳細は、「STANDARD_HASH」を参照してください。


関連項目:

拡張データ型の詳細は、「拡張データ型」を参照してください。

table_partition_description  table_partition_descriptionの副次句の動作は、table_partition_descriptionのレンジ・パーティションで説明した動作と同じです。

リスト・パーティション化の制限事項: リスト・パーティション化には、「一般的なパーティション化の制限事項:」に示されている制限事項があります。次の追加の制限が適用されます。

  • パーティション化キー列は1つのみ指定できます。

  • パーティション化キー列は、CHAR型、NCHAR型、VARCHAR2型、NVARCHAR2型、VARCHAR型、NUMBER型、FLOAT型、DATE型、TIMESTAMP型、TIMESTAMP WITH LOCAL TIMEZONE型またはRAW型である必要があります。

composite_range_partitions

composite_range_partitions句を使用すると、まず、をレンジ・パーティション化し、次にそれらのパーティションをレンジ・サブパーティション化、ハッシュ・サブパーティション化またはリスト・サブパーティション化できます。

コンポジット・レンジ・パーティション化でのINTERVAL句のセマンティクスは、レンジ・パーティション化の場合と同じです。詳細は、「INTERVAL句」を参照してください。

subpartition_by_rangesubpartition_by_hashまたはsubpartition_by_listでは、各コンポジット・レンジ・パーティションのサブパーティション化のタイプを指定できます。これらの句では、サブパーティション・テンプレートを指定できます。サブパーティション・テンプレートによって、この文の一部として作成されるサブパーティションまたは後で作成されるサブパーティションのデフォルトのサブパーティション特性が設定されます。

表のサブパーティション化のタイプ、およびオプションでサブパーティション・テンプレートを設定した後、1つ以上のレンジ・パーティションを定義する必要があります。

  • 非コンポジット・レンジ・パーティションと同じ要件を持つrange_values_clauseを指定する必要があります。

  • table_partition_descriptionを使用すると、各パーティションの物理特性および記憶特性を定義できます。

  • range_partition_descで、range_subpartition_desclist_subpartition_descindividual_hash_subpartsまたはhash_subparts_by_quantityを使用して、パーティションの個々のサブパーティションの特性を指定します。これらの句で指定する値は、これらのサブパーティションについて、subpartition_templateで指定した値にかわるものです。

  • ハッシュ・サブパーティション、リスト・サブパーティションまたはLOBサブパーティションに指定できる特性は、TABLESPACEおよびtable_compressionのみです。

コンポジット・レンジ・パーティション化の制限事項: サブパーティション化のタイプにかかわらず、コンポジット・レンジ・パーティションには次の制限事項があります。

  • サブパーティション・レベルで指定できる物理属性は、TABLESPACEおよび表の圧縮のみです。

  • コンポジット・パーティション化は、索引構成表に対して指定できません。そのため、コンポジット・パーティション表に対して、table_partition_descriptionOVERFLOW句は無効です。


関連項目:

コンポジット・レンジ・パーティション化の例は、「コンポジット・パーティション表の例:」を参照してください。コンポジット・リスト・パーティション化の例は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

composite_hash_partitions

composite_hash_partitions句を使用すると、まず、ハッシュ方式でをパーティション化し、次にそれらのパーティションをレンジ・サブパーティション化、ハッシュ・サブパーティション化またはリスト・サブパーティション化できます。

subpartition_by_rangesubpartition_by_hashまたはsubpartition_by_listでは、各コンポジット・レンジ・パーティションのサブパーティション化のタイプを指定できます。これらの句では、サブパーティション・テンプレートを指定できます。サブパーティション・テンプレートによって、この文の一部として作成されるサブパーティションまたは後で作成されるサブパーティションのデフォルトのサブパーティション特性が設定されます。

表のサブパーティション化のタイプを設定した後、individual_hash_partitionsまたはhash_partitions_by_quantityを指定する必要があります。

コンポジット・ハッシュ・パーティション化の制限事項: コンポジット・ハッシュ・パーティション化には、「コンポジット・レンジ・パーティション化の制限事項:」に示されているものと同じ制限事項があります。

composite_list_partitions

composite_list_partitions句を使用すると、まず、をリスト・パーティション化し、次にそれらのパーティションをレンジ・サブパーティション化、ハッシュ・サブパーティション化またはリスト・サブパーティション化できます。

subpartition_by_rangesubpartition_by_hashまたはsubpartition_by_listでは、各コンポジット・リスト・パーティションのサブパーティション化のタイプを指定できます。これらの句では、サブパーティション・テンプレートを指定できます。サブパーティション・テンプレートによって、この文の一部として作成されるサブパーティションおよび後で作成されるサブパーティションのデフォルトのサブパーティション特性が設定されます。

各コンポジット・パーティションのサブパーティション化のタイプを設定し、オプションでサブパーティション・テンプレートを定義した後、1つ以上のリスト・パーティションを定義する必要があります。

  • list_partition_descで、非コンポジット・リスト・パーティションと同じ要件を持つlist_values_clauseを指定する必要があります。

  • table_partition_descriptionを使用すると、各パーティションの物理特性および記憶特性を定義できます。

  • list_partition_descで、range_subpartition_desclist_subpartition_descindividual_hash_subpartsまたはhash_subparts_by_quantityを使用して、パーティションの個々のサブパーティションの特性を指定します。これらの句で指定する値は、これらのサブパーティションについて、subpartition_templateで指定した値にかわるものです。

コンポジット・リスト・パーティション化の制限事項: コンポジット・リスト・パーティション化には、「コンポジット・レンジ・パーティション化の制限事項:」に示されているものと同じ制限事項があります。

subpartition_template subpartition_templateは、レンジ・サブパーティション化、リスト・サブパーティション化およびハッシュ・サブパーティション化のオプション要素です。このテンプレートを使用することで、表の各パーティションにデフォルトのサブパーティションを定義できます。明示的にサブパーティションを定義していないパーティションには、このデフォルト・サブパーティション特性が作成されます。この句は、対称型パーティションの作成時に有効です。パーティション・レベルでサブパーティションを明示的に定義すると(range_subpartition_desclist_subpartition_descindividual_hash_subpartsまたはhash_subparts_by_quantity句で指定)、この句を上書きできます。

テンプレートを使用してサブパーティションを定義する場合、各サブパーティションの名前を指定する必要があります。また、サブパーティション・テンプレートのpartitioning_storage_clauseLOB_partitioning_clauseを指定する場合、LOB_segnameを指定する必要があります。


注意:

サブパーティションのテンプレートに対して表領域の記憶域を指定しても、tableのパーティションに対して明示的に指定した表領域の記憶域は上書きされません。サブパーティションに対して表領域の記憶域を指定するには、次のいずれかの操作を実行します。
  • パーティション・レベルでの表領域の記憶域を省略し、サブパーティションのテンプレートに対して表領域の記憶域を指定します。

  • 固有の表領域の記憶域を持つサブパーティションを個別に定義します。


サブパーティションのテンプレートの制限事項: サブパーティションのテンプレートには、次の制限事項があります。

  • 1つのLOBサブパーティションに対してTABLESPACEを指定した場合、次にそのLOB列のすべてのLOBサブパーティションに対してTABLESPACEを指定する必要があります。複数のLOBサブパーティションに対して同じ表領域を指定できます。

  • subpartition_template内で、または個々のサブパーティションを定義するときに、partitioning_storage_clauseを使用してリスト・サブパーティションに対して異なるLOB記憶域を指定した場合、LOBとVARRAY列の両方にLOB_segnameを指定する必要があります。

subpartition_by_range

subpartition_by_range句を使用すると、の各パーティションがレンジ・サブパーティション化されるように指定できます。列リストのサブパーティション化はパーティション化キーには関連しませんが、同じ制限事項が適用されます(columnを参照)。

subpartition_templateを使用して、デフォルトのサブパーティション特性値を指定できます。subpartition_templateを参照してください。データベースは、特性を明示的に指定していないこのパーティションの任意のサブパーティションに対して、これらの値を使用します。

range_partition_descまたはlist_partition_descrange_subpartition_descを使用して、各パーティションのレンジ・サブパーティションを個別に定義することもできます。subpartition_templaterange_subpartition_descの両方を指定しない場合、単一のMAXVALUEサブパーティションが作成されます。

subpartition_by_hash

subpartition_by_hash句を使用すると、の各パーティションがハッシュ・サブパーティション化されるように指定できます。列リストのサブパーティション化はパーティション化キーには関連しませんが、同じ制限事項が適用されます(columnを参照)。

subpartition_template句またはSUBPARTITIONS integer句を使用すると、サブパーティションを定義できます。subpartition_templateを参照してください。どちらの場合も、ロード・バランシングを最適化するには、2の累乗のパーティション数を指定する必要があります。

SUBPARTITIONS integerを指定する場合、の各パーティションにおけるデフォルトのサブパーティション数を設定します。また、サブパーティションが格納される1つ以上の表領域を指定することもできます。デフォルト値は1です。この句とsubpartition_templateの両方を指定しない場合、1つのハッシュ・サブパーティションを持つパーティションが作成されます。

subpartition_by_list

subpartition_by_list句を使用すると、の各パーティションがのリテラル値に基づいてサブパーティション化されるように指定できます。リスト・サブパーティション化キー列を1つのみ指定できます。

subpartition_templateを使用して、デフォルトのサブパーティション特性値を指定できます。subpartition_templateを参照してください。データベースは、特性を明示的に指定していないこのパーティションの任意のサブパーティションに対して、これらの値を使用します。

range_partition_descまたはlist_partition_desclist_subpartition_descを使用して、各パーティションのリスト・サブパーティションを個別に定義することもできます。subpartition_templatelist_subpartition_descの両方を指定しない場合、単一のDEFAULTサブパーティションが作成されます。

リスト・サブパーティション化の制限事項: リスト・サブパーティション化には、コンポジット・レンジ・パーティション化の制限事項:に示されているものと同じ制限事項があります。

コンポジット・パーティションの注意事項: コンポジット・パーティションには、次の注意事項があります。

  • すべてのサブパーティションについて、range_subpartition_desclist_subpartition_descindividual_hash_subpartsまたはhash_subparts_by_quantityを使用して、個々のサブパーティション名およびオプションでその他の特性を指定できます。

  • または、ハッシュ・サブパーティションおよびリスト・サブパーティションの場合:

    • サブパーティションの数を指定できます。また、サブパーティションが格納される1つ以上の表領域を指定することもできます。この場合、SYS_SUBPnという形式でサブパーティション名が割り当てられます。

    • サブパーティションの定義を省略すると、サブパーティションのテンプレートが作成されている場合は、そのテンプレートに基づいてサブパーティションが作成されます。サブパーティションのテンプレートが作成されていない場合、1つのハッシュ・サブパーティションまたは1つのデフォルト・リスト・サブパーティションが作成されます。

  • すべてのタイプのサブパーティションについて、サブパーティションの定義全体を指定しない場合、次のようにサブパーティション名が割り当てられます。

    • サブパーティションのテンプレートを指定し、またパーティション名を指定した場合、「partition_nameアンダースコア(_)subpartition_name」(たとえば、P1_SUB1)という形式でサブパーティション名が生成されます。

    • サブパーティションのテンプレートを指定していない場合、またはサブパーティションのテンプレートは指定したがパーティション名を指定しなかった場合、SYS_SUBPnという形式でサブパーティション名が生成されます。

reference_partitioning

この句を使用すると、参照によって表をパーティション化できます。参照によるパーティション化は、作成される表(子表)を既存のパーティション表(親表)への参照制約によって同一レベルでパーティション化する方法です。参照によって表をパーティション化すると、その後に親表で実行されるパーティションのメンテナンス操作は子表に自動的にカスケードします。そのため、パーティションのメンテナンス操作は、参照パーティション表で直接実行できません。

親表が時間隔パーティション表の場合は、親表の時間隔パーティションに対応する子の参照パーティション表内のパーティションが、子表への挿入時に作成されます。子表内に時間隔パーティションが作成されるときには、そのパーティションに関連する親表のパーティションからパーティション名が継承されます。子表に表レベルのデフォルト表領域がある場合は、その表領域が新しい時間隔パーティションの表領域として使用されます。それ以外の場合は、表領域が親表のパーティションから継承されます。時間隔パーティション表の参照方法の詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

constraint  パーティション化参照制約は、次の条件を満たしている必要があります。

  • 作成される表で定義される参照整合性制約を指定する必要があります。これは、親表の主キーまたは一意制約を参照する必要があります。制約は、ENABLE VALIDATE NOT DEFERRABLE状態である必要があります。これは、表の作成時に参照整合性制約を指定するときのデフォルトです。

  • 制約で参照されるすべての外部キー列は、NOT NULLである必要があります。

  • 制約を指定するときに、references_clauseON DELETE SET NULL句は指定できません。

  • 制約で参照される親表は、既存のパーティション表である必要があります。これは、どの方法でパーティション化されていてもかまいません。

  • 外部キーおよび親キーにはPL/SQLファンクションまたはLOB列を参照する仮想列を含めることはできません。

reference_partition_desc  このオプションの句を使用すると、パーティション名を指定し、パーティションの物理特性および記憶特性を定義できます。table_partition_descriptionの副次句の動作は、table_partition_descriptionのレンジ・パーティションで説明した動作と同じです。

子の参照パーティション表を作成する場合、その親表が時間隔パーティション表のときに、この句を指定すると、子表の時間隔パーティション以外のパーティションには、パーティション記述子が使用されます。パーティション記述子は、時間隔パーティションには指定できません。

参照パーティション化の制限事項: 参照パーティション化には、「一般的なパーティション化の制限事項:」に示されている制限事項があります。次の追加の制限が適用されます。

  • 参照パーティション化の制限事項は、親表のパーティション計画から導出されます。

  • この句は、索引構成表、外部表またはドメイン索引記憶表に対して指定できません。

  • 親表を参照でパーティション化することはできますが、制約を自己参照型にすることはできません。作成される表を自己参照に基づいてパーティション化することはできません。

  • ROW MOVEMENTが親表に対して有効である場合、子表に対しても有効である必要があります。


関連項目:

参照によるパーティション化の詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。また、「参照パーティション化の例」を参照してください。

system_partitioning

この句を使用すると、システム・パーティションを作成できます。システム・パーティション化には、パーティション化キー列は必要ありません。またシステム・パーティションには、レンジ境界やリスト境界またはハッシュ・アルゴリズムはありません。システム・パーティションは、パーティション化された実表を持つネストした表やドメイン索引記憶表などの依存表を同一レベルでパーティション化する方法です。

  • PARTITION BY SYSTEMのみを指定すると、SYS_Pnという形式のシステム生成の名前で1つのパーティションが作成されます。

  • PARTITION BY SYSTEM PARTITIONS integerを指定すると、integerで指定した数(1から1024K-1の範囲)のパーティションが作成されます。

  • パーティションの定義は参照パーティションと同じ構文であるため、reference_partition_descを共有します。reference_partition_desc構文で、その他のパーティション属性を指定できます。ただし、table_partition_descriptionで、OVERFLOW句は指定できません。

システム・パーティション化の制限事項: システム・パーティション化には、次の制限事項があります。

  • 索引構成表またはクラスタの一部である表は、システム・パーティション化できません。

  • コンポジット・パーティション化は、システム・パーティション化ではサポートされていません。

  • システム・パーティションは分割できません。

  • CREATE TABLE ...AS SELECT文でシステム・パーティション化は指定できません。

  • INSERT INTO ... AS subquery文を使用してシステム・パーティション表にデータを挿入するには、拡張パーティション構文を使用して、副問合せによって戻された値が挿入されるパーティションを指定する必要があります。


関連項目:

システム・パーティション化の使用の詳細は、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。また、「パーティション表と索引の参照」を参照してください。

CACHE | NOCACHE | CACHE READS

CACHE句を使用すると、バッファ・キャッシュ内でのブロックの格納方法を指定できます。次に、CACHEまたはNOCACHEも指定しない場合の例を示します。

  • CREATE TABLE文では、NOCACHEがデフォルトです。

  • ALTER TABLE文では、既存の値は変更されません。

CACHE この句は、アクセス頻度の高いデータについて、全表スキャンの実行時に、この表のために取り出されたブロックを、バッファ・キャッシュ内の最低使用頻度(LRU)リストの最高使用頻度側に置く場合に指定します。この属性は、小規模な参照表で有効です。


関連項目:

データベースによる最低使用頻度(LRU)リストの保持の詳細は、『Oracle Database概要』を参照してください。

LOB_storage_clauseのパラメータとしてCACHEを使用すると、より高速なアクセスのために、LOBデータ値がバッファ・キャッシュに配置されます。このパラメータは、logging_clauseと組み合せて評価されます。この句を省略すると、BasicFiles LOBとSecureFiles LOBの両方のデフォルト値は、NOCACHE LOGGINGになります。

CACHEの制限事項: CACHEは、索引構成表に対して指定できません。ただし、索引構成表は暗黙的にCACHE動作を提供します。

NOCACHE アクセス頻度の低いデータについて、NOCACHEを指定すると、全表スキャンの実行時にこの表用に取り出されたブロックは、バッファ・キャッシュ内のLRUリストの最低使用頻度側に置かれます。NOCACHEは、LOB記憶域のデフォルトです。

LOB_storage_clauseのパラメータとしてNOCACHEを使用すると、LOB値はバッファ・キャッシュに入りません。NOCACHEは、LOB記憶域のデフォルトです。

NOCACHEの制限事項: NOCACHEは、索引構成表に対して指定できません。

CACHE READS CACHE READSはLOB記憶域にのみ適用されます。LOB値が書込み操作中ではなく読取り操作中にバッファ・キャッシュに入れられるように指定します。

logging_clause この句を使用すると、データ・ブロックの記憶域を記録するかどうかを指定できます。


関連項目:

logging_clauseLOB_parametersの一部として指定した場合については、logging_clauseを参照してください。

RESULT_CACHE句

この句を使用すると、この表が指名されている文または問合せブロックの結果を、結果キャッシュに格納する対象とするかどうかを指定できます。結果キャッシュでは2つのモードを使用できます。

  • DEFAULT: 結果キャッシュは表レベルでは決定されません。RESULT_CACHE_MODE初期化パラメータがFORCEに設定されているか、またはMANUALに設定されていて問合せにRESULT_CACHEヒントを指定する場合は、問合せが結果キャッシュの対象となります。これは、この句を指定しない場合のデフォルトです。

  • FORCE: 問合せで指定したすべての表がこの設定になっている場合は、問合せにNO_RESULT_CACHEヒントが指定されていないかぎり、その問合せは常にキャッシュの対象となります。問合せで指定した1つ以上の表がDEFAULTに設定されている場合、この問合せにおける有効な表の注釈はDEFAULTであるとみなされ、前述したセマンティクスに従います。

DBA_ALL_およびUSER_TABLESデータ・ディクショナリ・ビューのRESULT_CACHE列を問い合せると、表の結果キャッシュのモードを確認できます。

RESULT_CACHEおよびNO_RESULT_CACHEのSQLヒントは、これらの結果キャッシュの表の注釈およびRESULT_CACHE_MODE初期化パラメータより優先されます。RESULT_CACHE_MODEFORCEに設定すると、その設定がこの表の注釈句より優先されます。


注意:

RESULT_CACHE_MODEFORCEに設定することはお薦めしません。なぜなら、データベースとクライアントがすべての問合せをキャッシュしようとするため、パフォーマンスおよびラッチのオーバーヘッドが非常に大きくなる可能性があるためです。


関連項目:

  • 結果キャッシュの概要は、『Oracle Call Interfaceプログラマーズ・ガイド』および『Oracle Database概要』を参照してください。

  • この句の使用方法の詳細は、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。

  • RESULT_CACHE_MODE初期化パラメータと*_TABLESデータ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

  • ヒントの詳細は、「RESULT_CACHEヒント」および「NO_RESULT_CACHEヒント」を参照してください。


parallel_clause

parallel_clauseを使用すると、表をパラレル作成した後、問合せおよびDMLのINSERTUPDATEDELETEおよびMERGEに対するデフォルトの並列度を設定できます。


注意:

parallel_clause構文は、以前のリリースの構文にかわるものです。以前のリリースの構文は下位互換用にサポートされていますが、動作がわずかに異なることがあります。

NOPARALLEL NOPARALLELを指定すると、シリアル実行が行われます。これはデフォルトです。

PARALLEL PARALLELを指定すると、並列度を選択できます。並列度は、すべての関係するインスタンスで使用可能なCPUの数に、初期化パラメータPARALLEL_THREADS_PER_CPUの値を掛けたものです。

PARALLEL integer integerには、パラレル操作で使用するパラレル・スレッド数である並列度を指定します。各パラレル・スレッドは、1、2個のパラレル実行サーバーを使用します。通常、最適な並列度が計算されるため、integerに値を指定する必要はありません。


関連項目:

この句の詳細は、parallel_clauseを参照してください。

NOROWDEPENDENCIES | ROWDEPENDENCIES

この句では、行レベル依存の追跡を使用するかどうかを指定できます。この機能を使用すると、表の各行は、行を変更した最後のトランザクションのコミット時刻以降を示すシステム変更番号(SCN)を持つことになります。の作成後は、この設定を変更できません。

ROWDEPENDENCIES ROWDEPENDENCIESを指定すると、行レベル依存の追跡を有効にできます。この設定は、主にレプリケーション環境でパラレル伝播を許可する場合に便利です。各行につきサイズが6バイト増えます。

NOROWDEPENDENCIES NOROWDEPENDENCIESを指定すると、で行レベル依存の追跡機能が使用されなくなります。これはデフォルトです。


関連項目:

レプリケーション環境での行レベル依存の追跡の使用については、『Oracle Databaseアドバンスト・レプリケーション』を参照してください。

enable_disable_clause

enable_disable_clauseを使用すると、制約が適用されるかどうかを指定できます。デフォルトでは、制約はENABLE VALIDATE状態で作成されます。

制約を使用可能および使用禁止にする場合の制限事項: 制約を使用可能および使用禁止にする処理には、次の制限事項があります。

  • 整合性制約を使用可能または使用禁止にする場合、この文または前の文に制約を定義する必要があります。

  • 参照された一意キー制約または主キー制約が使用可能でない場合は、外部キー制約を使用可能にできません。

  • using_index_clauseindex_properties句で、INDEXTYPE IS ...句は制約の定義において有効ではありません。


関連項目:

制約の詳細は、constraintを参照してください。また、「表の作成: ENABLE/DISABLEの例」も参照してください。

ENABLE句 この句を使用すると、表のデータに制約を適用できます。この句の詳細は、制約に関する項目の「ENABLE句」を参照してください。

DISABLE句 この句を使用すると、整合性制約を使用禁止にできます。この句の詳細は、制約に関する項目の「DISABLE句」を参照してください。

UNIQUE  UNIQUE句を使用すると、指定された列または列の組合せに定義された一意制約を使用可能または使用禁止にできます。

PRIMARY KEY  PRIMARY KEY句を使用すると、表に対して定義された主キー制約を使用可能または使用禁止にできます。

CONSTRAINT  CONSTRAINT句を使用すると、constraint_nameに指定する整合性制約を使用可能または使用禁止にできます。

KEEP | DROP INDEX この句を使用すると、一意キー制約または主キー制約を適用するために使用される索引を保持するかまたは削除するかを指定できます。

索引の保持と削除の制限事項: 一意キー制約または主キー制約が使用禁止の場合にのみ、この句を指定できます。

using_index_clause  using_index_clauseを使用すると、一意キー制約または主キー制約を適用するために使用される索引を指定または作成することができます。この句の詳細は、制約に関する項目のusing_index_clauseを参照してください。


関連項目:


CASCADE  CASCADEを指定すると、指定した整合性制約に依存する整合性制約を使用禁止にできます。参照整合性制約を構成する主キーまたは一意キーを使用禁止にする場合、この句を指定します。

CASCADEの制限事項: DISABLEを指定した場合のみ、CASCADEを指定できます。

row_movement_clause

row_movement_clauseを使用すると、表の行が移動されるかどうかを指定できます。表の圧縮時や、パーティション・データの更新操作時などに、行を移動できます。


注意:

データ・アクセスで静的なROWIDが必要な場合は、行移動を有効にしないでください。通常の表(ヒープ構成表)の場合は、行を移動すると、その行のROWIDが変更されます。索引構成表での行の移動の場合は、論理ROWIDの物理推測コンポーネントは不正確になりますが、論理ROWIDは有効のままです。

  • ENABLEを指定すると、行の移動を許可できます。このとき、ROWIDは変更されます。

  • DISABLEを指定すると、行の移動を禁止できます。このとき、ROWIDは変更されません。

この句を省略すると、行移動は使用禁止になります。

行の移動の制限事項: この句は、非パーティション索引構成表に対して指定できません。

flashback_archive_clause

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

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

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

  • 表の追跡を無効にするには、NO FLASHBACK ARCHIVEを指定します。これはデフォルトです。

flashback_archive_clauseの制限事項: フラッシュバック・データ・アーカイブには、次の制限事項があります。

  • この句は、ネストした表、クラスタ化表、一時表、リモート表または外部表に対しては指定できません。

  • ハイブリッド列圧縮によって圧縮された表に対しては、この句を指定できません。

  • この句を指定する表には、LONG列またはネストした表の列を含めることはできません。

  • この句を指定した後でエクスポート・ユーティリティ、インポート・ユーティリティまたはトランスポータブル表領域機能を使用して表を別のデータベースにコピーすると、コピー先の表では追跡は有効にならず、元の表のアーカイブ・データは使用できません。


関連項目:

  • フラッシュバック・データ・アーカイブの使用方法の概要は、『Oracle Database開発ガイド』を参照してください。

  • フラッシュバック・データ・アーカイブの割当て制限属性と保存属性の変更およびフラッシュバック・データ・アーカイブにおける表領域の記憶域の追加と変更の詳細は、「ALTER FLASHBACK ARCHIVE」を参照してください。


ROW ARCHIVAL

この句を指定すると、tableで行のアーカイブを有効にできます。この句によりデータベース内アーカイブを実装でき、表の行をアクティブまたはアーカイブ済として指定できます。その後、表内のアクティブな行のみを対象に問合せを実行できます。

この句を指定すると、非表示列ORA_ARCHIVE_STATEが表に作成されます。この列のデータ型は、VARCHAR2です。この列に値0または1を指定すると、行がアクティブであるか(0)アーカイブ対象であるか(1)を示すことができます。表へのデータの挿入時、ORA_ARCHIVE_STATEに値を指定しなかった場合、その値は0に設定されます。

  • セッションがROW ARCHIVE VISIBILITY = ACTIVEの場合、データベースは表に対する問合せの実行時に、アクティブな行のみを考慮します。

  • セッションがROW ARCHIVE VISIBILITY = ALLの場合、データベースは表に対する問合せの実行時に、すべての行を考慮します。


関連項目:

  • セッションにおける行のアーカイブの可視性を構成する方法については、「ALTER SESSION」「ROW ARCHIVAL VISIBILITY」句を参照してください。

  • 既存の表の行アーカイブを有効または無効にする方法は、「ALTER TABLE」の「[NO] ROW ARCHIVAL」句を参照してください。

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


AS subquery

副問合せを指定して表の内容を定義します。表の作成時に、副問合せの結果として戻された行を表の中に挿入します。

オブジェクト表の場合、subqueryには表の型に対応する1つの式、または表の型の最上位属性の数のどちらかを設定できます。詳細は、「SELECT」を参照してください。

subqueryが、既存のマテリアライズド・ビューと部分的または完全に同じビューを戻す場合、subqueryに指定された1つ以上の表のかわりにマテリアライズド・ビューがクエリー・リライトに使用されることがあります。


関連項目:

マテリアライズド・ビューおよびクエリー・リライトの詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

データ型およびデータ長は、副問合せから導出されます。整合性制約や、その他の列および表の属性には次の規則が適用されます。

  • 副問合せで、列を含む式ではなく列を選択した場合、選択した表の列にNOT NULL制約が明示的に作成されていると、新しい表の対応する列にもNOT DEFERRABLEおよびVALIDATE状態の同じ制約が自動的に定義されます。制約に違反する行がある場合、表は作成されずエラーが戻されます。

  • 選択した表の列に暗黙的に作成されたNOT NULL制約(たとえば、主キー)は、新しい表には引き継がれません。

  • 主キー、一意キー、外部キー、CHECK制約、パーティション化条件、索引および列のデフォルト値は、新しい表に引き継がれません。

  • 選択した表がパーティション化されている場合、新しい表を同じ方法でパーティション化するか、別の方法でパーティション化するか、またはパーティション化しないかを選択できます。パーティション化は、新しい表に引き継がれません。AS subquery句の前に、CREATE TABLE文の一部として、必要なパーティション化を指定します。

  • 選択した表で透過的データ暗号化を使用して暗号化された列は、新しい表の作成時に暗号化として列を定義しないかぎり、新しい表では暗号化されません。


    注意:

    機密列は、データを移入する前に暗号化することをお薦めします。これにより、機密データのクリア・テキスト・コピーの作成を回避できます。

subquery内のすべての式が、式ではなく列の場合、表定義から列を完全に省略できます。この場合、表の列名はsubqueryの列の名前と同じになります。

TO_LOBファンクションと組み合せてsubqueryを使用すると、別の表のLONG列の値を、作成する表の列のLOB値に変換できます。


関連項目:

  • LONGデータをLOBにコピーする理由およびタイミングについては、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。

  • TO_LOBファンクションの使用方法については、「変換ファンクション」を参照してください。

  • order_by_clauseの詳細は、「SELECT」を参照してください。

  • AS subquery句を使用するときの統計収集の詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください。


parallel_clause この文でparallel_clauseを指定した場合、INITIAL記憶域パラメータに対して指定する値は無視され、かわりにNEXTパラメータの値が使用されます。


関連項目:

これらのパラメータの詳細は、storage_clauseを参照してください。

ORDER BY ORDER BY句を使用すると、副問合せによって戻される行の順序付けを行うことができます。

この句をCREATE TABLEで指定した場合、この句が表全体にわたるデータを順序付けるとはかぎりません。たとえば、パーティション間での順序付けは行われません。同じキーの索引をORDER BYキー列として作成する場合に、この句を指定します。Oracle Databaseは、ORDER BYキーのデータをクラスタ化し、索引キーに対応させます。

表を定義する問合せの制限事項: 表問合せには、次の制限事項があります。

  • 表中の列数は、副問合せ中の式の数と同じである必要があります。

  • 列定義では、列名、デフォルト値および整合性制約のみを指定できます。データ型は指定できません。

  • 表が参照パーティション表で、なおかつ制約が表のパーティション化参照制約である場合を除いては、AS subqueryを含むCREATE TABLE文には、外部キー制約を定義できません。それ以外のすべての場合は、制約を指定せずに表を作成し、後でALTER TABLE文を使用してその制約を追加する必要があります。

object_table

OF句を使用すると、明示的にobject_type型のオブジェクト表を作成できます。オブジェクト表の各列は、object_type型の最上位の属性に対応します。各行には、オブジェクト・インスタンスが入り、また各インスタンスには、行の挿入時に一意のシステム生成オブジェクト識別子が割り当てられます。schemaを省略した場合、自分のスキーマ内にオブジェクト表が作成されます。

オブジェクト表、XMLType表、オブジェクト・ビューおよびXMLTypeビューには、列名は付けられません。そのため、システム生成疑似列OBJECT_IDが定義されます。問合せでこの列名を使用し、WITH OBJECT IDENTIFIER句を指定して、オブジェクト・ビューを作成できます。

object_table_substitution

object_table_substitution句を使用すると、サブタイプに対応する行オブジェクトの、このオブジェクト表への挿入を許可するかどうかを指定できます。

NOT SUBSTITUTABLE AT ALL LEVELS NOT SUBSTITUTABLE AT ALL LEVELSを指定すると、作成するオブジェクト表は置換できなくなります。また、置換は、すべての埋込みオブジェクト属性および埋込みのネストした表と配列の要素には使用禁止です。デフォルトは、SUBSTITUTABLE AT ALL LEVELSです。


関連項目:


object_properties

オブジェクト表のプロパティは、基本的にリレーショナル表と同じです。ただし、列を指定するかわりに、オブジェクトの属性を指定します。

attributeには、オブジェクト内の項目の修飾した列名を指定します。

oid_clause

oid_clauseを使用すると、オブジェクト表のオブジェクト識別子がシステム生成されるか、表の主キーを基に作成されるかを指定できます。デフォルトはSYSTEM GENERATEDです。

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

  • 主キー制約を表に指定していないと、OBJECT IDENTIFIER IS PRIMARY KEYは指定できません。

  • この句は、ネストした表には指定できません。


注意:

主キー・オブジェクト識別子はローカルで一意ですが、グローバルで一意であるとはかぎりません。グローバルで一意の識別子が必要な場合は、主キーがグローバルで一意であることを確認してください。

oid_index_clause

この句は、oid_clauseSYSTEM GENERATEDとして指定している場合のみに適用されます。非表示のオブジェクト識別子列に索引を指定します。また、任意に記憶特性を指定します。

indexには、非表示のシステム生成オブジェクト識別子列の索引の名前を指定します。indexを省略すると、名前が生成されます。

physical_propertiesおよびtable_properties

これらの句のセマンティクスについては、リレーショナル表の対応する項を参照してください。physical_propertiesおよびtable_propertiesを参照してください。

XMLType_table

XMLType_table構文を使用すると、XMLTypeデータ型の表を作成できます。XMLType表の作成に使用されるほとんどの句のセマンティクスは、オブジェクト表のセマンティクスと同じです。この項では、XMLType表固有の句について説明します。

オブジェクト表、XMLType表、オブジェクト・ビューおよびXMLTypeビューには、列名は付けられません。そのため、システム生成疑似列OBJECT_IDが定義されます。問合せでこの列名を使用し、WITH OBJECT IDENTIFIER句を指定して、オブジェクト・ビューを作成できます。

XMLSchema_spec

この句を使用すると、登録済XMLスキーマ(XMLSCHEMA句で登録するかELEMENT句の一部として登録)のURLおよびXML要素名を指定できます。

XMLスキーマのURLは省略可能ですが、要素は必ず指定します。XMLスキーマのURLを指定する場合は、DBMS_XMLSCHEMAパッケージを使用してXMLスキーマをあらかじめ登録しておく必要があります。

オプションのSTORE ALL VARRAYS AS句を使用すると、XMLType表または列に含まれるすべてのVARRAYの格納方法を指定できます。

  • STORE ALL VARRAYS AS LOBSを指定すると、すべてのVARRAYがLOBとして格納されます。

  • STORE ALL VARRAYS AS TABLESを指定すると、すべてのVARRAYが表として格納されます。

オプションのALLOW | DISALLOW句は、BINARY XML記憶域を指定した場合にのみ有効です。

  • ALLOW NONSCHEMAを指定すると、スキーマ・ベース以外のドキュメントをXMLType列に格納できます。

  • DISALLOW NONSCHEMAを指定すると、スキーマ・ベース以外のドキュメントはXMLType列に格納できません。これはデフォルトです。

  • ALLOW ANYSCHEMAを指定すると、スキーマ・ベースの任意のドキュメントをXMLType列に格納できます。

  • DISALLOW ANYSCHEMAを指定すると、スキーマ・ベースの任意のドキュメントはXMLType列に格納できません。これはデフォルトです。


関連項目:

  • DBMS_XMLSCHEMAパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

  • XMLデータの作成方法および使用方法の詳細は、『Oracle XML DB開発者ガイド』を参照してください。

  • 「XMLType表の例:」


表の作成: 一般的な例

次の文は、人事情報のサンプル・スキーマ(hr)が所有するemployees表を定義します。テスト・データベースでこの例を使用できるように、表および制約には不確定な名前が指定されています。

CREATE TABLE employees_demo
    ( employee_id    NUMBER(6)
    , first_name     VARCHAR2(20)
    , last_name      VARCHAR2(25) 
         CONSTRAINT emp_last_name_nn_demo NOT NULL
    , email          VARCHAR2(25) 
         CONSTRAINT emp_email_nn_demo     NOT NULL
    , phone_number   VARCHAR2(20)
    , hire_date      DATE  DEFAULT SYSDATE 
         CONSTRAINT emp_hire_date_nn_demo  NOT NULL
    , job_id         VARCHAR2(10)
       CONSTRAINT     emp_job_nn_demo  NOT NULL
    , salary         NUMBER(8,2)
       CONSTRAINT     emp_salary_nn_demo  NOT NULL
    , commission_pct NUMBER(2,2)
    , manager_id     NUMBER(6)
    , department_id  NUMBER(4)
    , dn             VARCHAR2(300)
    , CONSTRAINT     emp_salary_min_demo
                     CHECK (salary > 0) 
    , CONSTRAINT     emp_email_uk_demo
                     UNIQUE (email)
    ) ;

この表は12列で構成されます。employee_id列は、NUMBERデータ型です。hire_date列は、データ型がDATE、デフォルト値がSYSDATEです。last_name列は、VARCHAR2型で、NOT NULL制約があります。他の列については省略します。

表の作成: 記憶域の例 次の文は、記憶域の容量が小さいexample表領域の中にサンプル表employees_demoを定義します。

CREATE TABLE employees_demo
    ( employee_id    NUMBER(6)
    , first_name     VARCHAR2(20)
    , last_name      VARCHAR2(25) 
         CONSTRAINT emp_last_name_nn_demo NOT NULL
    , email          VARCHAR2(25) 
         CONSTRAINT emp_email_nn_demo     NOT NULL
    , phone_number   VARCHAR2(20)
    , hire_date      DATE  DEFAULT SYSDATE 
         CONSTRAINT emp_hire_date_nn_demo  NOT NULL
    , job_id         VARCHAR2(10)
       CONSTRAINT     emp_job_nn_demo  NOT NULL
    , salary         NUMBER(8,2)
       CONSTRAINT     emp_salary_nn_demo  NOT NULL
    , commission_pct NUMBER(2,2)
    , manager_id     NUMBER(6)
    , department_id  NUMBER(4)
    , dn             VARCHAR2(300)
    , CONSTRAINT     emp_salary_min_demo
                     CHECK (salary > 0) 
    , CONSTRAINT     emp_email_uk_demo
                     UNIQUE (email)
    ) 
   TABLESPACE example 
   STORAGE (INITIAL 8M);

DEFAULT ON NULL列値を含む表の作成例: 

次の文では、従業員データを格納するために使用できる、表myempを作成します。department_id列は、値が50のDEFAULT ON NULL列値で定義されています。そのため、それ以降のINSERT文でNULL値をdepartment_idに割り当てようとすると、そのかわりに値50が割り当てられるようになります。

CREATE TABLE myemp (employee_id number, last_name varchar2(25),
                    department_id NUMBER DEFAULT ON NULL 50 NOT NULL);

employees表内のemployee_id 178は、department_idにNULL値を保持しています。

SELECT employee_id, last_name, department_id
  FROM employees
  WHERE department_id IS NULL;

EMPLOYEE_ID LAST_NAME                 DEPARTMENT_ID
----------- ------------------------- -------------
        178 Grant

employees表のemployee_id列、last_name列、およびdepartment_id列のデータを、myemp表に移入します。

INSERT INTO myemp (employee_id, last_name, department_id)
  (SELECT employee_id, last_name, department_id from employees);

myemp表のemployee_id 178は、department_idに50の値を保持しています。

SELECT employee_id, last_name, department_id
  FROM myemp
  WHERE employee_id = 178;
 
EMPLOYEE_ID LAST_NAME                 DEPARTMENT_ID
----------- ------------------------- -------------
        178 Grant                                50

ID列を含む表の作成例: 

次の文では、ID列idを含む表t1を作成します。この順序ジェネレータは、増加する整数値を常にidに割り当てます。この整数値は、1から始まります。

CREATE TABLE t1 (id NUMBER GENERATED AS IDENTITY);

次の文では、ID列idを含む表t2を作成します。この順序ジェネレータは、デフォルトで、100から始まり10ずつ増加する整数値をidに割り当てるようになります。

CREATE TABLE t2 (id NUMBER GENERATED BY DEFAULT AS IDENTITY (START WITH 100 INCREMENT BY 10));

表の作成: 一時表の例 次の文は、販売員が使用するサンプル・データベースの一時表today_salesを作成します。各販売員のセッションは、自身のその日の販売データを表に格納します。一時的なデータは、セッションの終わりに削除されます。

CREATE GLOBAL TEMPORARY TABLE today_sales
   ON COMMIT PRESERVE ROWS 
   AS SELECT * FROM orders WHERE order_date = SYSDATE;

遅延セグメント作成を含む表の作成例: 次の文では、遅延セグメント作成を含む表を作成します。この表のデータを保持するためのセグメントは、表にデータが挿入されるまで作成されません。

CREATE TABLE later (col1 NUMBER, col2 VARCHAR2(20))    SEGMENT CREATION DEFERRED;

置換可能な表および列のサンプル: 次の文は、置換可能な表を作成するために使用可能な型の階層を作成します。employee_t型は、person_t型からnameおよびssn属性を継承し、department_idおよびsalary属性を追加しています。part_time_emp_t型は、employee_tおよび(employee_tを介して)person_tからすべての属性を継承し、num_hrs属性を追加しています。part_time_emp_tはデフォルトで最終型であるため、そのサブタイプを作成できません。

CREATE TYPE person_t AS OBJECT (name VARCHAR2(100), ssn NUMBER) 
   NOT FINAL;
/

CREATE TYPE employee_t UNDER person_t 
   (department_id NUMBER, salary NUMBER) NOT FINAL;
/

CREATE TYPE part_time_emp_t UNDER employee_t (num_hrs NUMBER);
/

次の文は、person_t型から置換可能な表を作成します。

CREATE TABLE persons OF person_t;

次の文は、person_t型の置換可能な列で表を作成します。

CREATE TABLE books (title VARCHAR2(100), author person_t);

personsまたはbooksに挿入するときに、person_tまたはそのサブタイプの属性に対する値を指定できます。挿入文の例は、「置換可能な表および列への挿入例:」を参照してください。

組込みファンクションおよび条件を使用して、このような表からデータを抽出することができます。例は、「TREAT」「SYS_TYPEID」および「IS OF type条件」を参照してください。

表の作成: パラレル化の例 次の文は、最適な数のパラレル実行サーバーを使用する表を作成して、employeesをスキャンし、dept_80に移入します。

CREATE TABLE dept_80
   PARALLEL
   AS SELECT * FROM employees
   WHERE department_id = 80;

パラレル化を使用することによって、表を作成するためにパラレル実行サーバーが使用されるため、表作成が高速化されます。表が作成された後、表へのアクセスに表作成と同じ並列度が使用されるため、表の問合せも高速化します。

次の文は、同じ表をシリアルで作成します。後続のDMLおよび表の問合せもシリアルで実行されます。

CREATE TABLE dept_80
   AS SELECT * FROM employees
   WHERE department_id = 80;

表の作成: ENABLE/DISABLEの例 次の文は、サンプル表departments_demoを作成します。この例では、NOT NULL制約が定義され、ENABLE VALIDATE状態に置かれます。テスト・データベースでこの例を使用できるように、表には不確定な名前が指定されています。

CREATE TABLE departments_demo
    ( department_id    NUMBER(4)
    , department_name  VARCHAR2(30)
           CONSTRAINT  dept_name_nn  NOT NULL
    , manager_id       NUMBER(6)
    , location_id      NUMBER(4)
    , dn               VARCHAR2(300)
    ) ;

次の文は、同じdepartments_demo表を作成しますが、使用禁止の主キー制約も定義します。

CREATE TABLE departments_demo
    ( department_id    NUMBER(4)   PRIMARY KEY DISABLE
    , department_name  VARCHAR2(30)
           CONSTRAINT  dept_name_nn  NOT NULL
    , manager_id       NUMBER(6)
    , location_id      NUMBER(4)
    , dn               VARCHAR2(300)
    ) ;

ネストした表の例: 次の文は、ネストした表の列ad_textdocs_ntabを使用してサンプル表pm.print_mediaを作成します。

CREATE TABLE print_media
    ( 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 textdocs_nestedtab;

表の作成: マルチレベル・コレクションの例 次の例では、アカウント・マネージャが2つのレベルのネストした表を使用して顧客の表を作成します。

CREATE TYPE phone AS OBJECT (telephone NUMBER);
/
CREATE TYPE phone_list AS TABLE OF phone;
/
CREATE TYPE my_customers AS OBJECT (
   cust_name VARCHAR2(25),
   phones phone_list);
/
CREATE TYPE customer_list AS TABLE OF my_customers;
/
CREATE TABLE business_contacts (
   company_name VARCHAR2(25),
   company_reps customer_list)
   NESTED TABLE company_reps STORE AS outer_ntab
   (NESTED TABLE phones STORE AS inner_ntab);

前述の例を次のように使用した場合、内部のネストした表に列または属性名がない場合にCOLUMN_VALUEキーワードが使用されます。

CREATE TYPE phone AS TABLE OF NUMBER;    
/
CREATE TYPE phone_list AS TABLE OF phone;
/
CREATE TABLE my_customers (
   name VARCHAR2(25),
   phone_numbers phone_list)
   NESTED TABLE phone_numbers STORE AS outer_ntab
   (NESTED TABLE COLUMN_VALUE STORE AS inner_ntab);

表の作成: LOB列の例 次の文は、LOB記憶特性を追加してpm.print_mediaを作成します。

CREATE TABLE print_media_new
    ( 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 textdocs_nestedtab_new
    LOB (ad_sourcetext, ad_finaltext) STORE AS
      (TABLESPACE example
       STORAGE (INITIAL 6144)
       CHUNK 4000
       NOCACHE LOGGING);

この例では、CHUNKの値を4096(2048のブロック・サイズの近似倍数)まで切り上げます。

索引構成表の例: 次の文は、索引を構成したサンプル表hr.countriesを作成します。

CREATE TABLE countries_demo
    ( country_id      CHAR(2)
      CONSTRAINT country_id_nn_demo NOT NULL
    , country_name    VARCHAR2(40)
    , currency_name   VARCHAR2(25)
    , currency_symbol VARCHAR2(3)
    , region          VARCHAR2(15)
    , CONSTRAINT    country_c_id_pk_demo
                    PRIMARY KEY (country_id ) )
    ORGANIZATION INDEX 
    INCLUDING   country_name 
    PCTTHRESHOLD 2 
    STORAGE 
     ( INITIAL  4K ) 
   OVERFLOW 
    STORAGE 
      ( INITIAL  4K ); 

外部表の例: 次の文は、サンプル表hr.departmentsのサブセットを示す外部表を作成します。opaque_format_specはイタリック体で示しています。ORACLE_LOADERアクセス・ドライバの詳細およびopaque_format_specへの値の指定方法については、『Oracle Databaseユーティリティ』を参照してください。

CREATE TABLE dept_external (
   deptno     NUMBER(6),
   dname      VARCHAR2(20),
   loc        VARCHAR2(25) 
)
ORGANIZATION EXTERNAL
(TYPE oracle_loader
 DEFAULT DIRECTORY admin
 ACCESS PARAMETERS
 (
  RECORDS DELIMITED BY newline
  BADFILE 'ulcase1.bad'
  DISCARDFILE 'ulcase1.dis'
  LOGFILE 'ulcase1.log'
  SKIP 20
  FIELDS TERMINATED BY ","  OPTIONALLY ENCLOSED BY '"'
  (
   deptno     INTEGER EXTERNAL(6),
   dname      CHAR(20),
   loc        CHAR(25)
  )
 )
 LOCATION ('ulcase1.ctl')
)
REJECT LIMIT UNLIMITED;

関連項目:

adminディレクトリの作成方法は、「ディレクトリの作成例:」を参照してください。

XMLTypeの例

この項では、XMLType表またはXMLType列の作成例について説明します。この例の詳細は、「SQL文でのXMLの使用方法」を参照してください。

XMLType表の例: 次の例では、暗黙的に1列のバイナリXML列を持つ非常に単純なXMLType表を作成します。

CREATE TABLE xwarehouses OF XMLTYPE;

次の例では、XMLSchemaベースの表を作成します。XMLスキーマは事前に作成しておく必要があります(詳細は、「SQL文でのXMLの使用方法」を参照してください)。

CREATE TABLE xwarehouses OF XMLTYPE
   XMLSCHEMA "http://www.example.com/xwarehouses.xsd"
   ELEMENT "Warehouse";

XMLスキーマベースの表に制約を定義したり、索引を作成できるため、後続の問合せのパフォーマンスが大幅に向上します。XMLType表にオブジェクト・リレーショナル・ビューを作成することも、オブジェクト・リレーショナル表にXMLTypeビューを作成することもできます。


関連項目:


XMLType列の例: 次の文は、XMLType列を持つ表を作成し、CLOBとして格納します。この表ではXMLスキーマが必要ないため、コンテンツ構造は事前に定義しません。

CREATE TABLE xwarehouses (
   warehouse_id        NUMBER,
   warehouse_spec      XMLTYPE)
   XMLTYPE warehouse_spec STORE AS CLOB
   (TABLESPACE example
    STORAGE (INITIAL 6144)
    CHUNK 4000
    NOCACHE LOGGING);

次の例は、同様の表を作成しますが、オブジェクト・リレーショナルXMLType列にXMLTypeデータを格納します。この列の構造は、指定したスキーマによって判断されます。

CREATE TABLE xwarehouses (
   warehouse_id    NUMBER,
   warehouse_spec  XMLTYPE)
   XMLTYPE warehouse_spec STORE AS OBJECT RELATIONAL
      XMLSCHEMA "http://www.example.com/xwarehouses.xsd"
      ELEMENT "Warehouse";

次の例では、SecureFiles CLOBとして格納されたXMLType列を持つ別の同様の表を作成します。この表ではXMLスキーマが必要ないため、コンテンツ構造は事前に定義しません。SecureFiles LOBには自動セグメント領域管理が行われる表領域が必要であるため、この例では「表領域に対してセグメント領域管理を指定する場合の例:」で作成した表領域を使用します。

CREATE TABLE xwarehouses (
  warehouse_id   NUMBER,
  warehouse_spec XMLTYPE)
  XMLTYPE        warehouse_spec STORE AS SECUREFILE CLOB
  (TABLESPACE auto_seg_ts
  STORAGE (INITIAL 6144)
  CACHE);

パーティション化の例

レンジ・パーティション化の例: サンプル・スキーマshsales表は、レンジでパーティション化されています。次の例では、簡略化したsales表を作成します。この例では、制約および記憶域要素は省略されています。

CREATE TABLE range_sales
    ( prod_id        NUMBER(6)
    , cust_id        NUMBER
    , time_id        DATE
    , channel_id     CHAR(1)
    , promo_id       NUMBER(6)
    , quantity_sold  NUMBER(3)
    , amount_sold         NUMBER(10,2)
    ) 
PARTITION BY RANGE (time_id)
  (PARTITION SALES_Q1_1998 VALUES LESS THAN (TO_DATE('01-APR-1998','DD-MON-YYYY')),
   PARTITION SALES_Q2_1998 VALUES LESS THAN (TO_DATE('01-JUL-1998','DD-MON-YYYY')),
   PARTITION SALES_Q3_1998 VALUES LESS THAN (TO_DATE('01-OCT-1998','DD-MON-YYYY')),
   PARTITION SALES_Q4_1998 VALUES LESS THAN (TO_DATE('01-JAN-1999','DD-MON-YYYY')),
   PARTITION SALES_Q1_1999 VALUES LESS THAN (TO_DATE('01-APR-1999','DD-MON-YYYY')),
   PARTITION SALES_Q2_1999 VALUES LESS THAN (TO_DATE('01-JUL-1999','DD-MON-YYYY')),
   PARTITION SALES_Q3_1999 VALUES LESS THAN (TO_DATE('01-OCT-1999','DD-MON-YYYY')),
   PARTITION SALES_Q4_1999 VALUES LESS THAN (TO_DATE('01-JAN-2000','DD-MON-YYYY')),
   PARTITION SALES_Q1_2000 VALUES LESS THAN (TO_DATE('01-APR-2000','DD-MON-YYYY')),
   PARTITION SALES_Q2_2000 VALUES LESS THAN (TO_DATE('01-JUL-2000','DD-MON-YYYY')),
   PARTITION SALES_Q3_2000 VALUES LESS THAN (TO_DATE('01-OCT-2000','DD-MON-YYYY')),
   PARTITION SALES_Q4_2000 VALUES LESS THAN (MAXVALUE))
;

パーティション表のメンテナンス操作については、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

時間隔パーティションの例: 次の例は、credit_limit列の期間によってパーティション化されるoe.customers表を作成します。遷移ポイントを設定するために1つのレンジ・パーティションが作成されます。表内の元のデータはすべてレンジ・パーティションの境界内にあります。次に、レンジ・パーティションを超えるデータが追加され、新しい時間隔パーティションが作成されます。

CREATE TABLE customers_demo (
  customer_id number(6),
  cust_first_name varchar2(20),
  cust_last_name varchar2(20),
  credit_limit number(9,2))
PARTITION BY RANGE (credit_limit)
INTERVAL (1000)
(PARTITION p1 VALUES LESS THAN (5001));
 
INSERT INTO customers_demo
  (customer_id, cust_first_name, cust_last_name, credit_limit)
  (select customer_id, cust_first_name, cust_last_name, credit_limit
  from customers);

USER_TAB_PARTITIONSデータ・ディクショナリ・ビューを問い合せてから、時間隔パーティションが作成されます。

SELECT partition_name, high_value FROM user_tab_partitions  WHERE table_name = 'CUSTOMERS_DEMO';

PARTITION_NAME                 HIGH_VALUE
------------------------------ ---------------
P1                             5001
 

レンジ・パーティションの上限を超えるデータを表に挿入します。

INSERT INTO customers_demo
  VALUES (699, 'Fred', 'Flintstone', 5500);

挿入後にUSER_TAB_PARTITIONSビューを再度問い合せ、挿入されたデータを格納するために作成された時間隔パーティションのシステム生成名を確認します。(システム生成名はセッションごとに異なります。)

SELECT partition_name, high_value FROM user_tab_partitions
  WHERE table_name = 'CUSTOMERS_DEMO'
  ORDER BY partition_name;

PARTITION_NAME                 HIGH_VALUE
------------------------------ ---------------
P1                             5001
SYS_P44                        6001

リスト・パーティション化の例: 次の文は、サンプル表oe.customersをリスト・パーティション表として作成します。この例では、サンプル表の一部の列およびすべての制約は省略されています。

CREATE TABLE list_customers 
   ( 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))
   PARTITION BY LIST (nls_territory) (
   PARTITION asia VALUES ('CHINA', 'THAILAND'),
   PARTITION europe VALUES ('GERMANY', 'ITALY', 'SWITZERLAND'),
   PARTITION west VALUES ('AMERICA'),
   PARTITION east VALUES ('INDIA'),
   PARTITION rest VALUES (DEFAULT));

LOB列のあるパーティション表の例: 次の文は、2つのパーティションp1p2、およびいくつかのLOB列を持つパーティション表print_media_demoを作成します。この文では、サンプル表pm.print_mediaを使用しています。

CREATE TABLE print_media_demo
   ( 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 textdocs_nestedtab_demo
      LOB (ad_composite, ad_photo, ad_finaltext)
      STORE AS(STORAGE (INITIAL 20M))
   PARTITION BY RANGE (product_id)
      (PARTITION p1 VALUES LESS THAN (3000) TABLESPACE tbs_01
         LOB (ad_composite, ad_photo)
         STORE AS (TABLESPACE tbs_02 STORAGE (INITIAL 10M))
         NESTED TABLE ad_textdocs_ntab STORE AS nt_p1 (TABLESPACE example),
       PARTITION P2 VALUES LESS THAN (MAXVALUE)
         LOB (ad_composite, ad_finaltext)
         STORE AS SECUREFILE (TABLESPACE auto_seg_ts)
         NESTED TABLE ad_textdocs_ntab STORE AS nt_p2
       )
   TABLESPACE tbs_03;

パーティションp1は、表領域tbs_01にあります。ad_compositeおよびad_photoに対するLOBデータのパーティションは、表領域tbs_02にあります。残りのLOB列に対するLOBデータのパーティションは、表領域tbs_01にあります。LOB列ad_compositeおよびad_photoに、記憶域属性INITIALを指定します。他の属性は、デフォルトの表レベルの指定から継承されます。表レベルで指定されていないデフォルトのLOB記憶域属性は、ad_composite列およびad_photo列については表領域tbs_02から継承されます。残りのLOB列については、表領域tbs_01から継承されます。LOB索引パーティションは、対応するLOBデータ・パーティションと同じ表領域に存在します。他の記憶域属性は、LOBデータ・パーティションの対応する属性値および索引パーティションがある表領域のデフォルト属性に基づきます。ad_textdocs_ntabのネストされた表パーティションは、nt_p1として表領域exampleに格納されます。

パーティションp2は、デフォルトの表領域tbs_03内にあります。ad_compositeおよびad_finaltextに対するLOBデータは、SecureFiles LOBとして表領域auto_seg_ts内に存在します。残りのLOB列に対するLOBデータは、表領域tbs_03にあります。ad_composite列およびad_finaltext列に対するLOB索引は、表領域auto_seg_ts内にあります。残りのLOB列に対するLOB索引は、表領域tbs_03にあります。ad_textdocs_ntabのネストされた表パーティションは、nt_p2としてデフォルト表領域tbs_03に格納されます。

ハッシュ・パーティション化の例: サンプル表oe.product_informationは、パーティション化されていません。次の例は、パフォーマンス上の理由で、このような大規模な表をハッシュでパーティション化します。この例では、表領域は仮想の名前です。

CREATE TABLE hash_products 
    ( product_id          NUMBER(6)   PRIMARY KEY
    , product_name        VARCHAR2(50) 
    , product_description VARCHAR2(2000) 
    , category_id         NUMBER(2) 
    , weight_class        NUMBER(1) 
    , warranty_period     INTERVAL YEAR TO MONTH 
    , supplier_id         NUMBER(6) 
    , product_status      VARCHAR2(20) 
    , list_price          NUMBER(8,2) 
    , min_price           NUMBER(8,2) 
    , catalog_url         VARCHAR2(50) 
    , CONSTRAINT          product_status_lov_demo 
                          CHECK (product_status in ('orderable' 
                                                  ,'planned' 
                                                  ,'under development' 
                                                  ,'obsolete') 
 ) ) 
 PARTITION BY HASH (product_id) 
 PARTITIONS 4 
 STORE IN (tbs_01, tbs_02, tbs_03, tbs_04); 

参照パーティション化の例 次の文では、前述の例で作成されたhash_productsパーティション表を使用しています。hash_productsの製品IDに基づくハッシュ・パーティション化への参照によってパーティション化されたoe.order_items表を作成します。結果の子表は、5つのパーティションで作成されます。子表part_order_itemsの各行について、外部キー値(product_id)が評価され、参照されるキーが属する親表hash_productsのパーティション番号が確認されます。part_order_itemsの行は、対応するパーティションに配置されます。

CREATE TABLE part_order_items (
    order_id        NUMBER(12) PRIMARY KEY,
    line_item_id    NUMBER(3),
    product_id      NUMBER(6) NOT NULL,
    unit_price      NUMBER(8,2),
    quantity        NUMBER(8),
    CONSTRAINT product_id_fk
    FOREIGN KEY (product_id) REFERENCES hash_products(product_id))
 PARTITION BY REFERENCE (product_id_fk);

コンポジット・パーティション表の例: 次の例は、表(「レンジ・パーティション化の例:」で作成)のデータを販売時刻で分割します。時刻と販売チャネルに従って最近のデータにアクセスする場合、コンポジット・パーティション化は、より適切です。次の例では、同じrange_sales表のコピーを作成しますが、レンジ-ハッシュ・コンポジット・パーティション化を指定します。最新のデータがあるパーティションは、システム生成とユーザー定義の両方のサブパーティション名でサブパーティション化されます。この例では、制約および記憶域属性は省略されています。

CREATE TABLE composite_sales
    ( prod_id        NUMBER(6)
    , cust_id        NUMBER
    , time_id        DATE
    , channel_id     CHAR(1)
    , promo_id       NUMBER(6)
    , quantity_sold  NUMBER(3)
    , amount_sold         NUMBER(10,2)
    ) 
PARTITION BY RANGE (time_id)
SUBPARTITION BY HASH (channel_id)
  (PARTITION SALES_Q1_1998 VALUES LESS THAN (TO_DATE('01-APR-1998','DD-MON-YYYY')),
   PARTITION SALES_Q2_1998 VALUES LESS THAN (TO_DATE('01-JUL-1998','DD-MON-YYYY')),
   PARTITION SALES_Q3_1998 VALUES LESS THAN (TO_DATE('01-OCT-1998','DD-MON-YYYY')),
   PARTITION SALES_Q4_1998 VALUES LESS THAN (TO_DATE('01-JAN-1999','DD-MON-YYYY')),
   PARTITION SALES_Q1_1999 VALUES LESS THAN (TO_DATE('01-APR-1999','DD-MON-YYYY')),
   PARTITION SALES_Q2_1999 VALUES LESS THAN (TO_DATE('01-JUL-1999','DD-MON-YYYY')),
   PARTITION SALES_Q3_1999 VALUES LESS THAN (TO_DATE('01-OCT-1999','DD-MON-YYYY')),
   PARTITION SALES_Q4_1999 VALUES LESS THAN (TO_DATE('01-JAN-2000','DD-MON-YYYY')),
   PARTITION SALES_Q1_2000 VALUES LESS THAN (TO_DATE('01-APR-2000','DD-MON-YYYY')),
   PARTITION SALES_Q2_2000 VALUES LESS THAN (TO_DATE('01-JUL-2000','DD-MON-YYYY'))
      SUBPARTITIONS 8,
   PARTITION SALES_Q3_2000 VALUES LESS THAN (TO_DATE('01-OCT-2000','DD-MON-YYYY'))
     (SUBPARTITION ch_c,
      SUBPARTITION ch_i,
      SUBPARTITION ch_p,
      SUBPARTITION ch_s,
      SUBPARTITION ch_t),
   PARTITION SALES_Q4_2000 VALUES LESS THAN (MAXVALUE)
      SUBPARTITIONS 4)
;

次の例は、サンプル表oe.customersに基づいて、顧客のパーティション表を作成します。この例では、表はcredit_limit列でパーティション化され、nls_territory列でリスト・サブパーティション化されます。個々のサブパーティションを定義してテンプレートを上書きしないかぎり、サブパーティション・テンプレートによって、後から追加されたパーティションのサブパーティション化が決定されます。このコンポジット・パーティション化によって、指定した地域内の掛貸限度範囲に基づいて、表を問い合せることができます。

CREATE TABLE customers_part (
   customer_id        NUMBER(6),
   cust_first_name    VARCHAR2(20),
   cust_last_name     VARCHAR2(20),
   nls_territory      VARCHAR2(30),
   credit_limit       NUMBER(9,2)) 
   PARTITION BY RANGE (credit_limit)
   SUBPARTITION BY LIST (nls_territory)
      SUBPARTITION TEMPLATE 
         (SUBPARTITION east  VALUES 
            ('CHINA', 'JAPAN', 'INDIA', 'THAILAND'),
          SUBPARTITION west VALUES 
             ('AMERICA', 'GERMANY', 'ITALY', 'SWITZERLAND'),
          SUBPARTITION other VALUES (DEFAULT))
      (PARTITION p1 VALUES LESS THAN (1000),
       PARTITION p2 VALUES LESS THAN (2500),
       PARTITION p3 VALUES LESS THAN (MAXVALUE));

オブジェクト列と表の例

オブジェクト表の作成例: 次の文は、オブジェクト型department_typを指定します。

CREATE TYPE department_typ AS OBJECT
   ( d_name   VARCHAR2(100), 
     d_address VARCHAR2(200) );
/
 

オブジェクト表departments_obj_tは、department_typ型の部門オブジェクトを保持します。

CREATE TABLE departments_obj_t OF department_typ; 

次の文は、ユーザー定義オブジェクト型salesrep_typを持つオブジェクト表salesrepsを作成します。

CREATE OR REPLACE TYPE salesrep_typ AS OBJECT
  ( repId NUMBER,
    repName VARCHAR2(64));

CREATE TABLE salesreps OF salesrep_typ;

ユーザー定義のオブジェクト識別子を含む表の作成例: 次の文は、オブジェクト型およびオブジェクト識別子が主キー・ベースの対応するオブジェクト表を作成します。

CREATE TYPE employees_typ AS OBJECT 
   (e_no NUMBER, e_address CHAR(30));
/

CREATE TABLE employees_obj_t OF employees_typ (e_no PRIMARY KEY)
   OBJECT IDENTIFIER IS PRIMARY KEY;

その後、inline_ref_constraint構文またはout_of_line_ref_constraint構文のいずれかを使用して、employees_obj_tオブジェクト表を参照できます。

CREATE TABLE departments_t 
   (d_no    NUMBER,
    mgr_ref REF employees_typ SCOPE IS employees_obj_t);

CREATE TABLE departments_t (
    d_no NUMBER,
    mgr_ref REF employees_typ 
       CONSTRAINT mgr_in_emp REFERENCES employees_obj_t);

タイプ列での制約の指定例: 次の例は、オブジェクト型の列の属性に制約を定義します。

CREATE TYPE address_t AS OBJECT
  ( hno    NUMBER,
    street VARCHAR2(40),
    city   VARCHAR2(20),
    zip    VARCHAR2(5),
    phone  VARCHAR2(10) );
/

CREATE TYPE person AS OBJECT
  ( name        VARCHAR2(40),
    dateofbirth DATE,
    homeaddress address_t,
    manager     REF person );
/

CREATE TABLE persons OF person
  ( homeaddress NOT NULL,
      UNIQUE (homeaddress.phone),
      CHECK (homeaddress.zip IS NOT NULL),
      CHECK (homeaddress.city <> 'San Francisco') );