Oracle9i SQL Reference Release 2 (9.2) Part Number A96540-02 |
|
|
View PDF |
Use the CREATE
TABLE
statement to create one of the following types of tables:
You can also create an object type and then use it in a column when creating a relational table.
Tables are created with no data unless a query is specified. You can add rows to a table with the INSERT
statement. After creating a table, you can define additional columns, partitions, and integrity constraints with the ADD
clause of the ALTER
TABLE
statement. You can change the definition of an existing column or partition with the MODIFY
clause of the ALTER
TABLE
statement.
See Also:
|
To create a relational table in your own schema, you must have the CREATE
TABLE
system privilege. To create a table in another user's schema, you must have CREATE
ANY
TABLE
system privilege. Also, the owner of the schema to contain the table must have either space quota on the tablespace to contain the table or UNLIMITED
TABLESPACE
system privilege.
In addition to these table privileges, to create an object table (or a relational table with an object type column), the owner of the table must have the EXECUTE
object privilege in order to access all types referenced by the table, or you must have the EXECUTE
ANY
TYPE
system privilege. These privileges must be granted explicitly and not acquired through a role.
Additionally, if the table owner intends to grant access to the table to other users, then the owner must have been granted the EXECUTE
privileges on the referenced types with the GRANT
OPTION
, or have the EXECUTE
ANY
TYPE
system privilege with the ADMIN
OPTION
. Without these privileges, the table owner has insufficient privileges to grant access to the table to other users.
To enable a unique or primary key constraint, you must have the privileges necessary to create an index on the table. You need these privileges because Oracle creates an index on the columns of the unique or primary key in the schema containing the table.
To create an external table, you must have the READ
object privilege on the directory in which the external data resides.
See Also:
|
create_table::=
relational_table::=
object_table::=
object_table_substitution::=
, object_properties::=
, OID_clause::=
, OID_index_clause::=
, physical_properties::=
, table_properties::=
)OID_clause::=
segment_attributes_clause::=
, data_segment_compression::=
, index_org_table_clause::=
, external_table_clause::=
)object_type_col_properties::=
, nested_table_col_properties::=
, varray_col_properties::=
, LOB_storage_clause::=
, LOB_partition_storage::=
, XMLType_column_properties::=
)substitutable_column_clause::=
nested_table_col_properties::=
substitutable_column_clause::=
, object_properties::=
, physical_properties::=
, column_properties::=
)logging_clause::=
LOB_partition_storage::=
XMLType_storage::=
XMLSchema_spec::=
external_data_properties::=
opaque_format_spec
: See Oracle9i Database Utilities for information on how to specify values for the opaque_format_spec
.)subpartition_by_list::=
, subpartition_by_hash::=
, range_values_clause::=
, table_partition_description::=
)individual_hash_partitions::=
hash_partitions_by_quantity::=
subpartition_by_list::=
range_values_clause::=
list_values_clause::=
table_partition_description::=
segment_attributes_clause::=
, data_segment_compression::=
, LOB_storage_clause::=
, varray_col_properties::=
, partition_level_subpartition::=
)partition_level_subpartition::=
subpartition_spec::=
partitioning_storage_clause::=
using_index_clause::=
, exceptions_clause
not supported in CREATE
TABLE
statements)global_partitioned_index::=
index_partitioning_clause::=
Specify GLOBAL
TEMPORARY
to indicate that the table is temporary and that its definition is visible to all sessions. The data in a temporary table is visible only to the session that inserts the data into the table.
A temporary table has a definition that persists the same as the definitions of regular tables, but it contains either session-specific or transaction-specific data. You specify whether the data is session- or transaction-specific with the ON COMMIT keywords.
See Also:
Oracle9i Database Concepts for information on temporary tables and "Temporary Table Example" |
LOB_storage_clause
: TABLESPACE
, storage_clause
, logging_clause
, MONITORING
or NOMONITORING
, or LOB_index_clause
.parallel_clause
returns an error.)segment_attributes_clause
, nested_table_col_properties
, or parallel_clause
.Specify the schema to contain the table. If you omit schema
, then Oracle creates the table in your own schema.
Specify the name of the table (or object table) to be created.
The relational properties describe the components of a relational table.
Specify the name of a column of the table.
If you also specify AS
subquery
, then you can omit column
and datatype
unless you are creating an index-organized table. If you specify AS
subquery
when creating an index-organized table, then you must specify column
, and you must omit datatype
.
The absolute maximum number of columns in a table is 1000. However, when you create an object table (or a relational table with columns of object, nested table, varray, or REF
type), Oracle maps the columns of the user-defined types to relational columns, creating in effect "hidden columns" that count toward the 1000-column limit.
Specify the datatype of a column.
You can specify a column of type ROWID
, but Oracle does not guarantee that the values in such columns are valid rowids.
See Also:
"Datatypes" for information on Oracle-supplied datatypes |
The DEFAULT
clause lets you specify a value to be assigned to the column if a subsequent INSERT
statement omits a value for the column. The datatype of the expression must match the datatype of the column. The column must also be long enough to hold this expression.
The DEFAULT
expression can include any SQL function as long as the function does not return a literal argument, a column reference, or a nested function invocation.
A DEFAULT
expression cannot contain references to PL/SQL functions or to other columns, the pseudocolumns LEVEL
, PRIOR
, and ROWNUM
, or date constants that are not fully specified.
See Also:
"About SQL Expressions" for the syntax of |
These clauses let you describe a column of type REF
. The only difference between these clauses is that you specify out_of_line_ref_constraint
from the table level, so you must identify the REF
column or attribute you are defining. You specify inline_ref_constraint
after you have already identified the REF
column or attribute.
See Also:
|
Use the inline_constraint
to define an integrity constraint as part of the column definition.
You can create UNIQUE
, PRIMARY
KEY
, and REFERENCES
constraints on scalar attributes of object type columns. You can also create NOT
NULL
constraints on object type columns, and CHECK
constraints that reference object type columns or any attribute of an object type column.
See Also:
|
Use the out_of_line_constraint
syntax to define an integrity constraint as part of the table definition.
Note: You must specify a |
See Also:
the syntax description of |
The supplemental_logging_props
clause lets you instruct Oracle to put additional data into the log stream to support log-based tools.
The ON
COMMIT
clause is relevant only if you are creating a temporary table. This clause specifies whether the data in the temporary table persists for the duration of a transaction or a session.
Specify DELETE
ROWS
for a transaction-specific temporary table (this is the default). Oracle will truncate the table (delete all its rows) after each commit.
Specify PRESERVE
ROWS
for a session-specific temporary table. Oracle will truncate the table (delete all its rows) when you terminate the session.
The physical properties relate to the treatment of extents and segments and to the storage characteristics of the table.
The physical_attributes_clause
lets you specify the value of the PCTFREE
, PCTUSED
, INITRANS
, and MAXTRANS
parameters and the storage characteristics of the table.
CREATE
statement (and in subsequent ALTER
TABLE
... ADD
PARTITION
statements), unless you explicitly override that value in the PARTITION
clause of the statement that creates the partition.If you omit this clause, then Oracle uses the following default values:
PCTFREE
: 10PCTUSED
: 40INITRANS
: 1MAXTRANS
: Depends on data block size
See Also:
|
Specify the tablespace in which Oracle creates the table, object table OID index, partition, LOB data segment, LOB index segment, or index-organized table overflow data segment. If you omit TABLESPACE
, then Oracle creates that item in the default tablespace of the owner of the schema containing the table.
For heap-organized tables with one or more LOB columns, if you omit the TABLESPACE
clause for LOB storage, then Oracle creates the LOB data and index segments in the tablespace where the table is created.
However, for an index-organized table with one or more LOB columns, if you omit TABLESPACE
, then the LOB data and index segments are created in the tablespace in which the primary key index segment of the index-organized table is created.
For nonpartitioned tables, the value specified for TABLESPACE
is the actual physical attribute of the segment associated with the table. For partitioned tables, the value specified for TABLESPACE
is the default physical attribute of the segments associated with all partitions specified in the CREATE
statement (and on subsequent ALTER
TABLE
... ADD
PARTITION
statements), unless you specify TABLESPACE
in the PARTITION
description.
See Also:
CREATE TABLESPACE for more information on tablespaces |
Specify whether the creation of the table (and any indexes required because of constraints), partition, or LOB storage characteristics will be logged in the redo log file (LOGGING
) or not (NOLOGGING
).The logging attribute of the table is independent of that of its indexes.
This attribute also specifies whether subsequent Direct Loader (SQL*Loader) and direct-path INSERT
operations against the table, partition, or LOB storage are logged (LOGGING
) or not logged (NOLOGGING
).
See Also:
|
The data_segment_compression
clause is valid only for heap-organized tables. Use this clause to instruct Oracle whether to compress data segments to reduce disk use. The COMPRESS
keyword enables data segment compression. The NOCOMPRESS
keyword disables data segment compression. NOCOMPRESS
is the default.
When you enable data segment compression, Oracle attempts to compress data when it is productive to do so. LOB data segments are not compressed. This clause is especially useful in environments such as data warehouses, where the amount of insert and update operations is small. You can specify data segment compression for the following portions of a heap-organized table:
physical_properties
clause of relational_table
or object_table
)table_partition_description
of the range_partitioning
clause)table_partition_description
of the list_partitioning
clause)nested_table_col_properties
clause)
See Also:
Oracle9i Database Performance Tuning Guide and Reference for information on calculating the compression ratio and to Oracle9i Data Warehousing Guide for information on data compression usage scenarios |
These keywords are deprecated and have been replaced with LOGGING
and NOLOGGING
, respectively. Although RECOVERABLE
and UNRECOVERABLE
are supported for backward compatibility, Oracle Corporation strongly recommends that you use the LOGGING
and NOLOGGING
keywords.
RECOVERABLE
for partitioned tables or LOB storage characteristics.UNRECOVERABLE
for a partitioned or index-organized tables.UNRECOVERABLE
only with AS
subquery
.The ORGANIZATION
clause lets you specify the order in which the data rows of the table are stored.
HEAP
indicates that the data rows of table
are stored in no particular order. This is the default.
INDEX
indicates that table
is created as an index-organized table. In an index-organized table, the data rows are held in an index defined on the primary key for the table.
EXTERNAL
indicates that table is a read-only table located outside the database.
Use the index_org_table_clause
to create an index-organized table. Oracle maintains the table rows (both primary key column values and nonkey column values) in an index built on the primary key. Index-organized tables are therefore best suited for primary key-based access and manipulation. An index-organized table is an alternative to:
CREATE
INDEX
statementCREATE
CLUSTER
statement that maps the primary key for the table to the cluster keyYou must specify a primary key for an index-organized table, because the primary key uniquely identifies a row. The primary key cannot be DEFERRABLE
. Use the primary key instead of the rowid for directly accessing index-organized rows.
If an index-organized table is partitioned and contains LOB columns, then you should specify the index_org_table_clause
first, then the LOB_storage_clause
, and then the appropriate table_partitioning_clauses
.
ROWID
for an index-organized table.composite_partitioning_clause
for an index-organized table.
Specify the percentage of space reserved in the index block for an index-organized table row. PCTTHRESHOLD
must be large enough to hold the primary key. All trailing columns of a row, starting with the column that causes the specified threshold to be exceeded, are stored in the overflow segment. PCTTHRESHOLD
must be a value from 1 to 50. If you do not specify PCTTHRESHOLD
, the default is 50.
You cannot specify PCTTHRESHOLD
for individual partitions of an index-organized table.
Specify MAPPING
TABLE
to instruct Oracle to create a mapping of local to physical ROWID
s and store them in a heap-organized table. This mapping is needed in order to create a bitmap index on the index-organized table.
Oracle creates the mapping table in the same tablespace as its parent index-organized table. You cannot query, perform DML operations on, or modify the storage characteristics of the mapping table.
You cannot specify the mapping_table_clause
for a partitioned index-organized table.
The key_compression
clauses let you enable or disable key compression for index-organized tables.
COMPRESS
to enable key compression, which eliminates repeated occurrence of primary key column values in index-organized tables. Use integer
to specify the prefix length (number of prefix columns to compress).
The valid range of prefix length values is from 1 to the number of primary key columns minus 1. The default prefix length is the number of primary key columns minus 1.
NOCOMPRESS
to disable key compression in index-organized tables. This is the default.At the partition level, you can specify COMPRESS
, but you cannot specify the prefix length with integer
.
The index_org_overflow_clause
lets you instruct Oracle that index-organized table data rows exceeding the specified threshold are placed in the data segment specified in this clause.
OVERFLOW
, then Oracle raises an error and does not execute the CREATE
TABLE
statement. This checking function guarantees that subsequent DML operations on the index-organized table will not fail because an overflow segment is lacking.OVERFLOW
keyword apply only to the overflow segment of the table. Physical attributes and storage characteristics for the index-organized table itself, default values for all its partitions, and values for individual partitions must be specified before this keyword.OVERFLOW
, even if they would otherwise be small enough be to stored inline.Specify a column at which to divide an index-organized table row into index and overflow portions. The primary key columns are always stored in the index. column_name
can be either the last primary-key column or any non-primary-key column. All non-primary-key columns that follow column_name
are stored in the overflow data segment.
You cannot specify this clause for individual partitions of an index-organized table.
Use the external_table_clause
to create an external table, which is a read-only table whose metadata is stored in the database but whose data in stored outside database. External tables let you query data without first loading it into the database, among other capabilities.
See Also:
Oracle9i Data Warehousing Guide, Oracle9i Database Administrator's Guide, and Oracle9i Database Utilities for information on the uses for external tables |
Because external tables have no data in the database, you define them with a small subset of the clauses normally available when creating tables.
relational_properties
clause, you can specify only column
, datatype
, and inline_constraint
.physical_properties_clause
, you can specify only the organization of the table (ORGANIZATION
EXTERNAL
external_table_clause
).table_properties
clause, you can specify only the parallel_clause
. The parallel_clause
lets you parallelize subsequent queries on the external data.
CREATE
TABLE
statement if you specify the external_table_clause
.LONG
columns.TYPE
access_driver_type
indicates the access driver of the external table. The access driver is the API that interprets the external data for the database. If you do not specify TYPE
, then Oracle uses the default access driver, ORACLE_LOADER
.
See Also:
Oracle9i Database Utilities for information about the |
DEFAULT
DIRECTORY
lets you specify a default directory object corresponding to a directory on the file system where the external data sources may reside. The default directory can also be used by the access driver to store auxiliary files such as error logs.
The optional ACCESS
PARAMETERS
clause lets you assign values to the parameters of the specific access driver for this external table:
opaque_format_spec
lets you list the parameters and their values. Please refer to Oracle9i Database Utilities for information on how to specify values for the opaque_format_spec
.
Field names specified in the opaque_format_spec
must match columns in the table definition. Oracle ignores any field in the opaque_format_spec
that is not matched by a column in the table definition.
USING
CLOB
subquery
lets you derive the parameters and their values through a subquery. The subquery cannot contain any set operators or an ORDER
BY
clause. It must return one row containing a single item of datatype CLOB
.Whether you specify the parameters in an opaque_format_spec
or derive them using a subquery, Oracle does not interpret anything in this clause. It is up to the access driver to interpret this information in the context of the external data.
The LOCATION
clause lets you specify one or more external data sources. Usually the location_specifier
is a file, but it need not be. Oracle does not interpret this clause. It is up to the access driver to interpret this information in the context of the external data.
The REJECT
LIMIT
clause lets you specify how many conversion errors can occur during a query of the external data before an Oracle error is returned and the query is aborted. The default value is 0.
The CLUSTER
clause indicates that the table is to be part of cluster
. The columns listed in this clause are the table columns that correspond to the cluster's columns. Generally, the cluster columns of a table are the column or columns that make up its primary key or a portion of its primary key.
Specify one column from the table for each column in the cluster key. The columns are matched by position, not by name.
A clustered table uses the cluster's space allocation. Therefore, do not use the PCTFREE
, PCTUSED
, INITRANS
, or MAXTRANS
parameters, the TABLESPACE
clause, or the storage_clause
with the CLUSTER
clause.
CLUSTER
with either ROWDEPENDENCIES
or NOROWDEPENDENCIES
unless the cluster has been created with the same ROWDEPENDENCIES
or NOROWDEPENDENCIES
setting.Use the column_properties
clauses to specify the storage attributes of a column.
The object_type_col_properties
determine storage characteristics of an object column or attribute or an element of a collection column or attribute.
For column
, specify an object column or attribute.
The substitutable_column_clause
indicates whether object columns or attributes in the same hierarchy are substitutable for each other. You can specify that a column is of a particular type, or whether it can contain instances of its subtypes, or both.
ELEMENT
, you constrain the element type of a collection column or attribute to a subtype of its declared type.IS
OF
[TYPE]
(ONLY
type
)
clause constrains the type of the object column to a subtype of its declared type.NOT
SUBSTITUTABLE
AT
ALL
LEVELS
indicates that the object column cannot hold instances corresponding to any of its subtypes. Also, substitution is disabled for any embedded object attributes and elements of embedded nested tables and varrays. The default is SUBSTITUTABLE
AT
ALL
LEVELS
.[NOT]
SUBSTITUTABLE
AT
ALL
LEVELS.
The LOB_storage_clause
lets you specify the storage attributes of LOB data segments.
For a nonpartitioned table (that is, when specified in the physical_properties
clause without any of the partitioning clauses), this clause specifies the table's storage attributes of LOB data segments.
For a partitioned table, Oracle implements this clause depending on where it is specified:
physical_properties
clause along with one of the partitioning clauses), this clause specifies the default storage attributes for LOB data segments associated with each partition or subpartition. These storage attributes apply to all partitions or subpartitions unless overridden by a LOB_storage_clause
at the partition or subpartition level.table_partition_description
), this clause specifies the storage attributes of the data segments of the partition or the default storage attributes of any subpartitions of the partition. A partition-level LOB_storage_clause
overrides a table-level LOB_storage_clause
.subpartition_by_hash
or subpartition_by_list
), this clause specifies the storage attributes of the data segments of the subpartition. A subpartition-level LOB_storage_clause
overrides both partition-level and table-level LOB_storage_clauses
.You cannot specify the LOB_index_clause
if table
is partitioned.
Specify the LOB column name or LOB object attribute for which you are explicitly defining tablespace and storage characteristics that are different from those of the table. Oracle automatically creates a system-managed index for each LOB_item
you create.
Specify the name of the LOB data segment. You cannot use LOB_segname
if you specify more than one LOB_item
.
The LOB_parameters
clause lets you specify various elements of LOB storage.
If you enable storage in row, then the LOB value is stored in the row (inline) if its length is less than approximately 4000 bytes minus system control information. This is the default.
For an index-organized table, you cannot specify this parameter unless you have specified an OVERFLOW
segment in the index_org_table_clause
.
If you disable storage in row, then the LOB value is stored out of line (outside of the row) regardless of the length of the LOB value.
Note: The LOB locator is always stored inline (inside the row) regardless of where the LOB value is stored. You cannot change the value of |
Specify the number of bytes to be allocated for LOB manipulation. If integer
is not a multiple of the database block size, then Oracle rounds up (in bytes) to the next multiple. For example, if the database block size is 2048 and integer
is 2050, then Oracle allocates 4096 bytes (2 blocks). The maximum value is 32768 (32K), which is the largest Oracle block size allowed. The default CHUNK
size is one Oracle database block.
Specify the maximum percentage of overall LOB storage space used for maintaining old versions of the LOB. The default value is 10, meaning that older versions of the LOB data are not overwritten until they consume 10% of the overall LOB storage space.
You can specify the PCTVERSION
parameter whether the database is running in manual or automatic undo mode. PCTVERSION
is the default in manual undo mode. RETENTION
is the default in automatic undo mode.
You cannot specify both PCTVERSION
and RETENTION
.
Use this clause to indicate that Oracle should retain old versions of this LOB column. Oracle uses the value of the UNDO_RETENTION
initialization parameter to determine the amount (in time) of committed undo data to retain in the database.
You can specify the RETENTION
parameter only if the database is running in automatic undo mode. In this mode, RETENTION
is the default value unless you specify PCTVERSION
.
You cannot specify both PCTVERSION
and RETENTION
.
Specify the number of groups of free lists for the LOB segment. Normally integer
will be the number of instances in a Real Application Clusters environment or 1 for a single-instance database.
You can specify this parameter only if the database is running in automatic undo mode. In this mode, FREEPOOLS
is the default unless you specify the FREELIST
GROUPS
parameter of the storage_clause
. If you specify neither FREEPOOLS
nor FREELIST
GROUPS
, then Oracle uses a default of FREEPOOLS
1
if the database is in automatic undo management mode and a default of FREELIST
GROUPS
1
if the database is in manual undo management mode.
You cannot specify both FREEPOOLS
and the FREELIST
GROUPS
parameter of the storage_clause
.
This clause has been deprecated. If you specify this clause, then Oracle ignores it. Oracle automatically generates an index for each LOB column and names and manages the LOB indexes internally.
See Also:
|
The varray_col_properties
let you specify separate storage characteristics for the LOB in which a varray will be stored. If varray_item
is a multilevel collection, then Oracle stores all collection items nested within varray_item
in the same LOB in which varray_item
is stored.
physical_properties
clause without any of the partitioning clauses), this clause specifies the storage attributes of the LOB data segments of the varray.physical_properties
clause along with one of the partitioning clauses), this clause specifies the default storage attributes for the varray's LOB data segments associated with each partition (or its subpartitions, if any).table_partition_description
), this clause specifies the storage attributes of the varray's LOB data segments of that partition or the default storage attributes of the varray's LOB data segments of any subpartitions of this partition. A partition-level varray_col_properties
overrides a table-level varray_col_properties
.subpartition_by_hash
or subpartition_by_list
), this clause specifies the storage attributes of the varray's data segments of this subpartition. A subpartition-level varray_col_properties
overrides both partition-level and table-level varray_col_properties
.If you specify STORE
AS
LOB
,
If you do not specify STORE
AS
LOB
, then Oracle handles varray storage differently from other LOBs. Storage is based on the maximum possible size of the varray (that is the number of elements times the element size, plus a small amount for system control information) rather than on the actual size of a varray column.
You cannot specify the TABLESPACE
parameter of LOB_parameters
as part of this clause. The LOB tablespace for a varray defaults to the containing table's tablespace.
The substitutable_column_clause
has the same behavior as described for object_type_col_properties
.
The nested_table_col_properties
let you specify separate storage characteristics for a nested table, which in turn enables you to define the nested table as an index-organized table. The storage table is created in the same tablespace as its parent table (using the default storage characteristics) and stores the nested table values of the column for which it was created.
You must include this clause when creating a table with columns or column attributes whose type is a nested table. Clauses within nested_table_col_properties
that function the same way they function for parent object tables are not repeated here.
Specify the name of a column (or a top-level attribute of the table's object type) whose type is a nested table.
If the nested table is a multilevel collection, then the inner nested table or varray may not have a name. In this case, specify COLUMN_VALUE
in place of the nested_item
name.
See Also:
"Multi-level Collection Example" for examples using |
Specify the name of the table where the rows of nested_item
reside. For a nonpartitioned table, the storage table is created in the same schema and the same tablespace as the parent table. For a partitioned table, the storage table is created in the default tablespace of the schema.
storage_table
directly, but you can modify its storage characteristics by specifying its name in an ALTER
TABLE
statement.
See Also:
ALTER TABLE for information about modifying nested table column storage characteristics |
Specify what Oracle returns as the result of a query.
VALUE
returns a copy of the nested table itself.LOCATOR
returns a collection locator to the copy of the nested table.
If you do not specify the segment_attributes_clause
or the LOB_storage_clause
, then the nested table is heap organized and is created with default storage characteristics.
OID_clause
.TABLESPACE
(as part of the segment_attributes_clause
) for a nested table. The tablespace is always that of the parent table.object_properties
) an out_of_line_ref_constraint
, inline_ref_constraint
, or foreign key constraint for the attributes of a nested table. However, you can modify a nested table to add such constraints using ALTER
TABLE
.ALTER
TABLE
statement.
See Also:
|
The XMLType_column_properties let you specify storage attributes for an XMLTYPE
column.
XMLType
columns can be stored either in LOB or object-relational columns.
STORE
AS
OBJECT
RELATIONAL
if you want Oracle to store the XMLType
data in object-relational columns. Storing data object relationally lets you define indexes on the relational columns and enhances query performance.
If you specify object-relational storage, you must also specify the XMLSchema_spec
clause.
STORE
AS
CLOB
if you want Oracle to store the XMLType
data in a CLOB
column. Storing data in a CLOB
column preserves the original content and enhances retrieval time.
If you specify LOB storage, you can specify either LOB parameters or the XMLSchema_spec
clause, but not both. Specify the XMLSchema_spec
clause if you want to restrict the table or column to particular schema-based XML instances.
This clause lets you specify the URL of a registered XMLSchema (in the XMLSCHEMA
clause or as part of the ELEMENT
clause) and an XML element name. You must specify an element, although the XMLSchema URL is optional. If you do specify an XMLSchema URL, you must already have registered the XMLSchema using the DBMS_XMLSCHEMA
package.
See Also:
|
Use the table_partitioning_clauses
to create a partitioned table.
LONG
or LONG
RAW
columns.
Note: The storage of partitioned database entities in tablespaces of different block sizes is subject to several restrictions. Please refer to Oracle9i Database Administrator's Guide for a discussion of these restrictions. |
Use the range_partitioning
clause to partition the table on ranges of values from the column list. For an index-organized table, the column list must be a subset of the primary key columns of the table.
Specify an ordered list of columns used to determine into which partition a row belongs (the partitioning key).
The columns in the column list can be of any built-in datatype except ROWID
, LONG
, LOB
, or TIMESTAMP
WITH
TIME
ZONE
.
The name partition
must conform to the rules for naming schema objects and their part as described in "Schema Object Naming Rules". If you omit partition
, then Oracle generates a name with the form SYS_P
n
.
Notes:
|
Specify the noninclusive upper bound for the current partition. The value list is an ordered list of literal values corresponding to the column list in the range_partitioning
clause. You can substitute the keyword MAXVALUE
for any literal in in the value list. MAXVALUE
specifies a maximum value that will always sort higher than any other value, including NULL
.
Specifying a value other than MAXVALUE
for the highest partition bound imposes an implicit integrity constraint on the table.
See Also:
|
Use the table_partition_description
to define the physical and storage characteristics of the table.
The segment_attributes_clause
and data_segment_compression
clause have the same function as described for the table_properties
of the table as a whole.
The key_compression
clause and OVERFLOW
clause have the same function as described for the index_org_table_clause
.
The LOB_storage_clause
lets you specify LOB storage characteristics for one or more LOB items in this partition or in any list subpartitions of this partition. If you do not specify the LOB_storage_clause
for a LOB item, then Oracle generates a name for each LOB data partition. The system-generated names for LOB data and LOB index partitions take the form SYS_LOB_P
n
and SYS_IL_P
n
, respectively, where P stands for "partition" and n
is a system-generated number. The corresponding system-generated names for LOB subpartitions are SYS_LOB_SUBP
n
and SYS_IL_SUBP
n
.
The varray_col_properties
lets you specify storage characteristics for one or more varray items in this partition or in any list subpartitions of this partition.
The partition_level_subpartition
clause is valid only for composite-partitioned tables. See partition_level_subpartition
.
Use the hash_partitioning
clause to specify that the table is to be partitioned using the hash method.
Specify an ordered list of columns used to determine into which partition a row belongs (the partitioning key).
Oracle assigns rows to partitions using a hash function on values found in columns designated as the partitioning key. You can specify hash partitioning in one of two ways:
SYS_P
n
.The only clause you can specify in the partitioning_storage_clause
is the TABLESPACE
clause.
SYS_P
n
. The STORE
IN
clause specifies one or more tablespaces where the hash partitions are to be stored. The number of tablespaces does not have to equal the number of partitions. If the number of partitions is greater than the number of tablespaces, then Oracle cycles through the names of the tablespaces.For both methods of hash partitioning, for optimal load balancing you should specify a number of partitions that is a power of 2. Also for both methods of hash partitioning, the only attribute you can specify for hash partitions is TABLESPACE
. Hash partitions inherit all other attributes from table-level defaults.
Tablespace storage specified at the table level is overridden by tablespace storage specified at the partition level, which in turn is overridden by tablespace storage specified at the subpartition level.
If you specify tablespace storage in both the STORE
IN
clause of the hash_partitions_by_quantity
clause and the TABLESPACE
clause of the partitioning_storage_clause
, then the STORE
IN
clause determines placement of partitions as the table is being created. The TABLESPACE
clause determines the default tablespace at the table level for subsequent operations.
See Also:
Oracle9i Database Concepts for more information on hash partitioning |
column_list
.ROWID
or UROWID
pseudocolumns.ROWID
, LONG
, or LOB.
See Also:
Oracle9i Database Globalization Support Guide for more information on character set support |
Use the list_partitioning
clause to partition the table on lists of literal values from column
. List partitioning is useful for controlling how individual rows map to specific partitions.
If you omit the partition name, then Oracle assigns partition names of the form SYS_P
n
.
The list_values_clause
of each partition must have at least one value. No value (including NULL
) can appear in more than one partition. List partitions are not ordered.
The DEFAULT
keyword creates a partition into which Oracle will insert any row that does not map to another partition. Therefore, you can specify DEFAULT
for only one partition, and you cannot specify any other values for that partition. Further, the default partition must be the last partition you define (similar to the use of MAXVALUE
for range partitions).
The string comprising the list of values for each partition can be up to 4K bytes. The total number of values for all partitions cannot exceed 64K-1.
column_list
, and it cannot be a LOB column.list_values_clause
must be unique among all partitions of table
.Use the composite_partitioning
clause to first partition table
by range, and then partition the partitions further into hash or list subpartitions. This combination of range partitioning and hash or list subpartitioning is called composite partitioning.
After establishing the type of subpartitioning you want for each composite partition (using the subpartition_by_hash
or subpartition_by_list
clause), you must define each of the range partitions.
range_values_clause
, which has the same requirements as for noncomposite range partitions.table_partition_description
to define the physical and storage characteristics of the each partition. Within the table_partition_description
, you can use the partition_level_subpartition
clause to define the properties of individual subpartitions.SYS_P
n
.TABLESPACE
.You cannot specify composite partitioning for an index-organized table. Therefore, the OVERFLOW
clause of the table_partition_description
is not valid for composite-partitioned tables.
The subpartition_template
is a common optional element of both range-hash and range-list composite partitioning. The template lets you define default subpartitions for each table partition. Oracle will create these default subpartitions in any partition for which you do not explicitly define subpartitions. This clause is useful for creating symmetric partitions. You can override this clause by explicitly defining subpartitions at the partition level (in the partition_level_subpartition
clause).
When defining subpartitions with a template, you must specify a name for each subpartition.
partitioning_storage_clause
you can specify is the TABLESPACE
clause.TABLESPACE
for one LOB subpartition, then you must specify TABLESPACE
for all of the LOB subpartitions of that LOB column. You can specify the same tablespace for more than one subpartition.partitioning_storage_clause
, either in the subpartition_template
or when defining individual subpartitions, then you must specify LOB_segname
(for both LOB and varray columns).Use the subpartition_by_hash
clause to indicate that Oracle should subpartition by hash each partition in table
. The subpartitioning column list is unrelated to the partitioning key, but is subject to the same restrictions (see column
).
You can define the subpartitions using the subpartition_template
or the SUBPARTITIONS
quantity
clause. See subpartition_template
. In either case, for optimal load balancing you should specify a number of partitions that is a power of 2.
Specify the default number of subpartitions in each partition of table
, and optionally one or more tablespaces in which they are to be stored.
The default value is 1. If you omit both this clause and subpartition_template
, then Oracle will create each partition with one hash subpartition unless you subsequently specify the partition_level_subpartition
clause.
In addition to the restrictions for composite partitioning in general (see composite_partitioning
), for hash subpartitioning in subpartition_template
, you cannot specify the list_values_clause
.
Use the subpartition_by_list
clause to indicate that Oracle should subpartition each partition in table
by literal values from column
.
If you omit subpartition_template
, then you can define list subpartitions individually for each partition using the partition_level_subpartition
clause of table_partition_description
. If you omit both subpartition_template
and partition_level_subpartition
, then Oracle creates a single DEFAULT
subpartition.
In addition to the restrictions for composite partitioning in general (see composite_partitioning
), for list subpartitioning:
list_values_clause
, which is subject to the same requirements as at the table level.subpartition_template
, you cannot specify the hash_subpartition_quantity
clause.This clause of the table_partition_description
is valid only for composite-partitioned tables. This clause lets you specify hash or list subpartitions for partition
. This clause overrides the default settings established in the subpartition_by_hash
clause (for range-hash composite partitions) or in the subpartition_template
(for range-hash or range-list composite partitions).
For all composite partitions:
SYS_SUBPn
. The number of tablespaces does not have to equal the number of subpartitions. If the number of partitions is greater than the number of tablespaces, Oracle cycles through the names of the tablespaces.subpartition_spec
to specify individual subpartitions by name, and optionally the tablespace where each should be stored.partition_level_subpartition
and if you have created a subpartition template, Oracle uses the template to create subpartitions. If you have not created a subpartition template, Oracle creates one hash subpartition or one DEFAULT
list subpartition.partition_level_subpartition
entirely, Oracle assigns subpartition names as follows:
partition_name
underscore (_) subpartition_name
" (for example, P1_SUB1
).SYS_SUBP
n
.partition_spec
, the only clause of the partitioning_storage_clause
you can specify is the TABLESPACE
clause.For range-hash composite partitions, the list_values_clause
of subpartition_spec
is not relevant and is invalid.
For range-list composite partitions:
hash_subpartition_quantity
is not relevant, so you must use the lower branch of partition_level_subpartition
.subpartition_spec
, you must specify the list_values_clause
for each subpartition, and the values you specify for each subpartition cannot exist in any other subpartition of the same partition.Use the CACHE
clauses to indicate how Oracle should store blocks in the buffer cache. If you specify neither CACHE
nor NOCACHE
:
CREATE
TABLE
statement, NOCACHE
is the defaultALTER
TABLE
statement, the existing value is not changed.For data that is accessed frequently, this clause indicates that the blocks retrieved for this table are placed at the most recently used end of the least recently used (LRU) list in the buffer cache when a full table scan is performed. This attribute is useful for small lookup tables.
As a parameter in the LOB_storage_clause
, CACHE
specifies that Oracle places LOB data values in the buffer cache for faster access.
You cannot specify CACHE
for an index-organized table. However, index-organized tables implicitly provide CACHE
behavior.
For data that is not accessed frequently, this clause indicates that the blocks retrieved for this table are placed at the least recently used end of the LRU list in the buffer cache when a full table scan is performed.
As a parameter in the LOB_storage_clause
, NOCACHE
specifies that the LOB value is either not brought into the buffer cache or brought into the buffer cache and placed at the least recently used end of the LRU list. (The latter is the default behavior.)
You cannot specify NOCACHE
for index-organized tables.
CACHE
READS
applies only to LOB storage. It specifies that LOB values are brought into the buffer cache only during read operations, but not during write operations.
See Also:
|
The parallel_clause
lets you parallelize creation of the table and set the default degree of parallelism for queries and DML (INSERT
, UPDATE
, DELETE
, and MERGE
) operations on the table after creation.
Specify NOPARALLEL
for serial execution. This is the default.
Specify PARALLEL
if you want Oracle to select a degree of parallelism equal to the number of CPUs available on all participating instances times the value of the PARALLEL_THREADS_PER_CPU
initialization parameter.
Specification of integer
indicates the degree of parallelism, which is the number of parallel threads used in the parallel operation. Each parallel thread may use one or two parallel execution servers. Normally Oracle calculates the optimum degree of parallelism, so it is not necessary for you to specify integer
.
table
contains any columns of LOB or user-defined object type, then subsequent INSERT
, UPDATE
, or DELETE
operations that modify the LOB or object type column are executed serially without notification. Subsequent queries, however, will be executed in parallel.parallel_clause
.CREATE
TABLE
... AS
SELECT
statements that reference remote objects can run in parallel. However, the "remote object" must really be on a remote database. The reference cannot loop back to an object on the local database (for example, by way of a synonym on the remote database pointing back to an object on the local database).See Also:
Oracle9i Database Performance Tuning Guide and Reference, Oracle9i Database Concepts, Oracle9i Data Warehousing Guide for more information on parallelized operations, and "PARALLEL Example" |
This clause lets you specify whether table
will use row-level dependency tracking. With this feature, each row in the table has a system change number (SCN) that represents a time greater than or equal to the commit time of the last transaction that modified the row. You cannot change this setting after table
is created.
Specify ROWDEPENDENCIES
if you want to enable row-level dependency tracking. This setting is useful primarily to allow for parallel propagation in replication environments. It increases the size of each row by 6 bytes.
Specify NOROWDEPENDENCIES
if you do not want table
to use the row level dependency tracking feature. This is the default.
See Also:
Oracle9i Advanced Replication for information about the use of row-level dependency tracking in replication environments |
Specify MONITORING
if you want modification statistics to be collected on this table. These statistics are estimates of the number of rows affected by DML statements over a particular period of time. They are available for use by the optimizer or for analysis by the user.
You cannot specify MONITORING
for a temporary table.
Specify NOMONITORING
if you do not want Oracle to collect modification statistics on the table. This is the default.
You cannot specify NOMONITORING
for a temporary table.
The enable_disable_clause
lets you specify whether Oracle should apply a constraint. By default, constraints are created in ENABLE
VALIDATE
state.
See Also:
|
Specify ENABLE
if you want the constraint to be applied to the data in the table.
ENABLE
VALIDATE
specifies that all old and new data also complies with the constraint. An enabled validated constraint guarantees that all data is and will continue to be valid.
If any row in the table violates the integrity constraint, the constraint remains disabled and Oracle returns an error. If all rows comply with the constraint, Oracle enables the constraint. Subsequently, if new data violates the constraint, Oracle does not execute the statement and returns an error indicating the integrity constraint violation.
ENABLE
NOVALIDATE
ensures that all new DML operations on the constrained data comply with the constraint. This clause does not ensure that existing data in the table complies with the constraint and therefore does not require a table lock.If you specify neither VALIDATE
nor NOVALIDATE
, the default is VALIDATE
.
If you change the state of any single constraint from ENABLE
NOVALIDATE
to ENABLE
VALIDATE
, the operation can be performed in parallel, and does not block reads, writes, or other DDL operations.
You cannot enable a foreign key that references a disabled unique or primary key.
Specify DISABLE
to disable the integrity constraint. Disabled integrity constraints appear in the data dictionary along with enabled constraints. If you do not specify this clause when creating a constraint, Oracle automatically enables the constraint.
DISABLE
VALIDATE
disables the constraint and drops the index on the constraint, but keeps the constraint valid. This feature is most useful in data warehousing situations, because it lets you load large amounts of data while also saving space by not having an index. This setting lets you load data from a nonpartitioned table into a partitioned table using the exchange_partition_clause
of the ALTER
TABLE
statement or using SQL*Loader. All other modifications to the table (inserts, updates, and deletes) by other SQL statements are disallowed.
See Also:
Oracle9i Data Warehousing Guide for more information on using this setting |
DISABLE
NOVALIDATE
signifies that Oracle makes no effort to maintain the constraint (because it is disabled) and cannot guarantee that the constraint is true (because it is not being validated).
You cannot drop a table whose primary key is being referenced by a foreign key even if the foreign key constraint is in DISABLE
NOVALIDATE
state. Further, the optimizer can use constraints in DISABLE
NOVALIDATE
state.
See Also:
Oracle9i Database Performance Tuning Guide and Reference for information on when to use this setting |
If you specify neither VALIDATE
nor NOVALIDATE
, the default is NOVALIDATE
.
If you disable a unique or primary key constraint that is using a unique index, Oracle drops the unique index.
The UNIQUE
clause lets you enable or disable the unique constraint defined on the specified column or combination of columns.
The PRIMARY
KEY
clause lets you enable or disable the table's primary key constraint.
The CONSTRAINT
clause lets you enable or disable the integrity constraint named constraint
.
This clause lets you either preserve or drop the index Oracle has been using to enforce a unique or primary key constraint.
You can specify this clause only when disabling a unique or primary key constraint.
The using_index_clause
lets you specify an index for Oracle to use to enforce a unique or primary key constraint, or lets you instruct Oracle to create the index used to enforce the constraint.
You can specify the using_index_clause
only when enabling unique or primary key constraints. You can specify the clauses of the using_index_clause
in any order, but you can specify each clause only once.
schema
.index
, Oracle attempts to enforce the constraint using the specified index. If Oracle cannot find the index or cannot use the index to enforce the constraint, Oracle returns an error.create_index_statement
, Oracle attempts to create the index and use it to enforce the constraint. If Oracle cannot create the index or cannot use the index to enforce the constraint, Oracle returns an error.INITRANS
, MAXTRANS
, TABLESPACE
, PCTFREE
, and STORAGE
parameters for the index. You cannot specify PCTUSED
or the logging_clause
for the index.table
is partitioned, you can specify a locally or globally partitioned index for the unique or primary key constraint.NOT
NULL
, foreign key, or check constraint.schema.index
) or create an index (create_index_statement
) when enabling the primary key of an index-organized table.
See Also:
|
The global_partitioned_index
clause lets you specify that the partitioning of the index is user defined and is not equipartitioned with the underlying table. By default, nonpartitioned indexes are global indexes. Oracle will partition the global index on the ranges of values from the table columns you specify in column_list
. You cannot specify this clause for a local index.
The column_list
must specify a left prefix of the index column list. That is, if the index is defined on columns a
, b
, and c
, then for column_list
you can specify (a
, b
, c)
, or (a
, b)
, or (a
, c)
, but you cannot specify (b
, c)
or (c)
or (b
, a
).
column_list
.ROWID
pseudocolumn or a column of type ROWID
.
See Also:
Oracle9i Database Globalization Support Guide for more information on character set support |
Use this clause to describe the individual index partitions. The number of repetitions of this clause determines the number of partitions. If you omit partition
, Oracle generates a name with the form SYS_P
n
.
For VALUES
LESS
THAN
(value_list
), specify the (noninclusive) upper bound for the current partition in a global index. The value list is a comma-delimited, ordered list of literal values corresponding to the column list in the global_partitioned_index
clause. Always specify MAXVALUE
as the value of the last partition.
Specify CASCADE
to disable any integrity constraints that depend on the specified integrity constraint. To disable a primary or unique key that is part of a referential integrity constraint, you must specify this clause.
You can specify CASCADE
only if you have specified DISABLE
.
The row_movement_clause lets you specify whether Oracle can move a table row. It is possible for a row to move, for example, during data segment compression or an update operation on partitioned data.
ENABLE
to allow Oracle to move a row, thus changing the rowid.DISABLE
if you want to prevent Oracle from moving a row, thus preventing a change of rowid.You cannot specify this clause for a nonpartitioned index-organized table.
If you omit this clause, then Oracle disables row movement.
Specify a subquery to determine the contents of the table. The rows returned by the subquery are inserted into the table upon its creation.
For object tables, subquery
can contain either one expression corresponding to the table type, or the number of top-level attributes of the table type.
If subquery
returns (in part or totally) the equivalent of an existing materialized view, then Oracle may use the materialized view (for query rewrite) in place of one or more tables specified in subquery
.
See Also:
Oracle9i Data Warehousing Guide for more information on materialized views and query rewrite |
Oracle derives datatypes and lengths from the subquery. Oracle follows the following rules for integrity constraints and other column and table attributes:
NOT
NULL
constraints on columns in the new table that were explicitly created on the corresponding columns of the selected table if the subquery selects the column rather than an expression containing the column. If any rows violate the constraint, then Oracle does not create the table and returns an error.NOT
NULL
constraints that were implicitly created by Oracle on columns of the selected table (for example, for primary keys) are not carried over to the new table.If all expressions in subquery
are columns, rather than expressions, then you can omit the columns from the table definition entirely. In this case, the names of the columns of table are the same as the columns in subquery
.
You can use subquery
in combination with the TO_LOB
function to convert the values in a LONG
column in another table to LOB values in a column of the table you are creating.
See Also:
|
If you specify the parallel_clause
in this statement, then Oracle will ignore any value you specify for the INITIAL
storage parameter, and will instead use the value of the NEXT
parameter.
See Also:
|
The ORDER
BY
clause lets you order rows returned by the subquery.
CREATE
TABLE
statement that contains AS
subquery
. Instead, you must create the table without the constraint and then add it later with an ALTER
TABLE
statement.The OF
clause lets you explicitly create an object table of type object_type
. The columns of an object table correspond to the top-level attributes of type object_type
. Each row will contain an object instance, and each instance will be assigned a unique, system-generated object identifier (OID) when a row is inserted. If you omit schema
, then Oracle creates the object table in your own schema.
Object tables (as well as XMLType
tables, object views, and XMLType
views) do not have any column names specified for them. Therefore, Oracle defines a system-generated column SYS_NC_ROWINFO$
. You can use this column name in queries and to create object views with the WITH
OBJECT
IDENTIFIER
clause.
Use the object_table_substitution
clause to specify whether row objects corresponding to subtypes can be inserted into this object table.
NOT
SUBSTITUTABLE
AT
ALL
LEVELS
indicates that the object table being created is not substitutable. In addition, substitution is disabled for all embedded object attributes and elements of embedded nested tables and arrays. The default is SUBSTITUTABLE
AT
ALL
LEVELS
.
The properties of object tables are essentially the same as those of relational tables. However, instead of specifying columns, you specify attributes of the object.
For attribute
, specify the qualified column name of an item in an object.
The OID_clause
lets you specify whether the object identifier (OID) of the object table should be system generated or should be based on the primary key of the table. The default is SYSTEM
GENERATED
.
OBJECT
IDENTIFIER
IS
PRIMARY
KEY
unless you have already specified a PRIMARY
KEY
constraint for the table.This clause is relevant only if you have specified the OID_clause
as SYSTEM
GENERATED
. It specifies an index, and optionally its storage characteristics, on the hidden object identifier column.
For index
, specify the name of the index on the hidden system-generated object identifier column. If you omit index
, then Oracle generates a name.
The semantics of these clauses are documented in the corresponding sections under relational tables. See physical_properties
and table_properties
.
Use the XMLType_table
syntax to create a table of datatype XMLType
.
Object tables (as well as XMLType
tables, object views, and XMLType
views) do not have any column names specified for them. Therefore, Oracle defines a system-generated column SYS_NC_ROWINFO$
. You can use this column name in queries and to create object views with the WITH
OBJECT
IDENTIFIER
clause.
This clause lets you determine how Oracle manages the storage of the underlying columns.
Specify OBJECT
RELATIONAL
if you want Oracle to store the XMLType
data in object relational columns. If you specify OBJECT
RELATIONAL
, then you must also specify an XMLSchema in the XMLSchema_storage_clause
, and you must already have registered the schema (using the DBMS_XMLSCHEMA
package). Oracle will create the table conforming to the registered schema.
Specify CLOB
if you want Oracle to store the XML data in a CLOB
column. If you specify CLOB
, then you may also specify either a LOB segment name, or the LOB_parameters
clause, or both.
This clause lets you specify the URL of a registered XMLSchema (in the XMLSCHEMA
clause or as part of the ELEMENT
clause) and an XML element name. You must specify an element, although the XMLSchema URL is optional. If you do specify an XMLSchema URL, you must already have registered the XMLSchema using the DBMS_XMLSCHEMA
package.
See Also:
|
To statement shows how the employees
table owned by the sample Human Resources (hr
) schema was created:
CREATE TABLE employees_demo ( employee_id NUMBER(6) , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT emp_last_name_nn NOT NULL , email VARCHAR2(25) CONSTRAINT emp_email_nn NOT NULL , phone_number VARCHAR2(20) , hire_date DATE DEFAULT SYSDATE CONSTRAINT emp_hire_date_nn NOT NULL , job_id VARCHAR2(10) CONSTRAINT emp_job_nn NOT NULL , salary NUMBER(8,2) CONSTRAINT emp_salary_nn NOT NULL , commission_pct NUMBER(2,2) , manager_id NUMBER(6) , department_id NUMBER(4) , dn VARCHAR2(300) , CONSTRAINT emp_salary_min CHECK (salary > 0) , CONSTRAINT emp_email_uk UNIQUE (email) ) ;
This table contains twelve columns. The employee_id
column is of datatype NUMBER
. The hire_date
column is of datatype DATE
and has a default value of SYSDATE
. The last_name
column is of type VARCHAR2
and has a NOT
NULL
constraint, and so on.
To define the same employees_demo table in the example
tablespace with a small storage capacity and limited allocation potential, issue the following statement:
CREATE TABLE employees_demo ( employee_id NUMBER(6) , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT emp_last_name_nn NOT NULL , email VARCHAR2(25) CONSTRAINT emp_email_nn NOT NULL , phone_number VARCHAR2(20) , hire_date DATE DEFAULT SYSDATE CONSTRAINT emp_hire_date_nn NOT NULL , job_id VARCHAR2(10) CONSTRAINT emp_job_nn NOT NULL , salary NUMBER(8,2) CONSTRAINT emp_salary_nn NOT NULL , commission_pct NUMBER(2,2) , manager_id NUMBER(6) , department_id NUMBER(4) , dn VARCHAR2(300) , CONSTRAINT emp_salary_min CHECK (salary > 0) , CONSTRAINT emp_email_uk UNIQUE (email) ) TABLESPACE example STORAGE (INITIAL 6144 NEXT 6144 MINEXTENTS 1 MAXEXTENTS 5 );
The following statement creates a temporary table today_sales
for use by sales representatives in the sample database. Each sales representative session can store its own sales data for the day in the table. The temporary data is deleted at the end of the session.
CREATE GLOBAL TEMPORARY TABLE today_sales ON COMMIT PRESERVE ROWS AS SELECT * FROM orders WHERE order_date = SYSDATE;
The following statement creates a substitutable table from the person_t
type, which was created in "Type Hierarchy Example":
CREATE TABLE persons OF person_t;
The following statement creates a table with a substitutable column of type person_t
:
CREATE TABLE books (title VARCHAR2(100), author person_t);
When you insert into persons
or books
, you can specify values for the attributes of person_t
or any of its subtypes. Example insert statements appear in "Inserting into a Substitutable Tables and Columns: Examples".
You can extract data from such tables using built-in functions and conditions. For examples, see the functions TREAT and SYS_TYPEID, and "IS OF type Conditions".
The following statement creates a table using an optimum number of parallel execution servers to scan employees
and to populate dept_80
:
CREATE TABLE dept_80 PARALLEL AS SELECT * FROM employees WHERE department_id = 80;
Using parallelism speeds up the creation of the table because Oracle uses parallel execution servers to create the table. After the table is created, querying the table is also faster, because the same degree of parallelism is used to access the table.
The following statement creates the same table serially. Subsequent DML and queries on the table will also be serially executed.
CREATE TABLE dept_80 AS SELECT * FROM employees WHERE department_id = 80;
The following statement shows how the sample table departments
was created. The example defines a NOT
NULL
constraint, and places it in ENABLE
VALIDATE
state:
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) ) ;
The following statement creates the same departments_demo
table but also defines a disabled primary key constraint:
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) ) ;
The following statement shows how the sample table pm.print_media
was created with a nested table column ad_textdocs_ntab
:
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 , press_release LONG ) NESTED TABLE ad_textdocs_ntab STORE AS textdocs_nestedtab;
The following example shows how an account manager might create a table of customers using two levels of nested tables:
CREATE TYPE phone AS OBJECT (telephone NUMBER); / CREATE TYPE phone_list AS TABLE OF phone; / CREATE TYPE my_customer AS OBJECT ( cust_name VARCHAR2(25), phones phone_list); / CREATE TYPE customer_list AS TABLE OF my_customer; / 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);
The following variation of this example shows how to use the COLUMN_VALUE
keyword if the inner nested table has no column or attribute name:
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);
The following statement is a variation of the statement that created the pm.print_media
table with some added LOB storage characteristics:
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 , press_release LONG ) NESTED TABLE ad_textdocs_ntab STORE AS textdocs_nestedtab_new LOB (ad_sourcetext, ad_finaltext) STORE AS (TABLESPACE example STORAGE (INITIAL 6144 NEXT 6144) CHUNK 4000 NOCACHE LOGGING);
In the example, Oracle rounds the value of CHUNK
up to 4096 (the nearest multiple of the block size of 2048).
The following statement shows how the sample table hr.countries
, which is index organized, was created:
CREATE TABLE countries ( country_id CHAR(2) CONSTRAINT country_id_nn NOT NULL , country_name VARCHAR2(40) , currency_name VARCHAR2(25) , currency_symbol VARCHAR2(3) , region VARCHAR2(15) , CONSTRAINT country_c_id_pk PRIMARY KEY (country_id ) ORGANIZATION INDEX INCLUDING country_name PCTTHRESHOLD 2 STORAGE ( INITIAL 4K NEXT 2K PCTINCREASE 0 MINEXTENTS 1 MAXEXTENTS 1 ) OVERFLOW STORAGE ( INITIAL 4K NEXT 2K PCTINCREASE 0 MINEXTENTS 1 MAXEXTENTS 1 );
The following statement creates an external table that represents a subset of the sample table hr.departments
. The opaque_format_spec
is shown in italics. Please refer to Oracle9i Database Utilities for information on the ORACLE_LOADER
access driver and how to specify values for the opaque_format_spec
.
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;
See Also:
"Creating a Directory: Examples" to see how the |
This section contains brief examples of creating an XMLType
table or XMLType
column. For a more expanded version of these examples, please refer to "Using XML in SQL Statements".
The following example creates a very simple XMLType
table with one implicit CLOB
column:
CREATE TABLE xwarehouses OF XMLTYPE;
Because Oracle implicitly stores the data in a CLOB
column, it is subject to all of the restrictions on LOB columns. To avoid these restrictions, you can create an XMLSchema-based table, as shown in the following example. The XMLSchema must already have been created (see "Using XML in SQL Statements" for more information):
CREATE TABLE xwarehouses OF XMLTYPE XMLSCHEMA "http://www.oracle.com/xwarehouses.xsd" ELEMENT "Warehouse";
You can define constraints on an XMLSchema-based table, and you can also create indexes on XMLSchema-based tables, which greatly enhance subsequent queries. You can create object-relational views on XMLType
tables, and you can create XMLType
views on object-relational tables.
See Also:
|
The following example creates a table with an XMLType
column stored as a CLOB
. This table does not require an XMLSchema, so the content structure is not predetermined:
CREATE TABLE xwarehouses ( warehouse_id NUMBER, warehouse_spec XMLTYPE) XMLTYPE warehouse_spec STORE AS CLOB (TABLESPACE example STORAGE (INITIAL 6144 NEXT 6144) CHUNK 4000 NOCACHE LOGGING);
The following example creates a similar table, but stores XMLType
data in an object relational XMLType
column whose structure is determined by the specified schema:
CREATE TABLE xwarehouses ( warehouse_id NUMBER, warehouse_spec XMLTYPE) XMLTYPE warehouse_spec STORE AS OBJECT RELATIONAL XMLSCHEMA "http://www.oracle.com/xwarehouses.xsd" ELEMENT "Warehouse";
The sales
table in the sample schema sh
is partitioned by range. The following example shows an abbreviated variation of the sales
table (constraints and storage elements have been omitted from the example):
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)) ;
For information about partitioned table maintenance operations, see the Oracle9i Database Administrator's Guide.
The following statement shows how the sample table oe.customers
might have been created as a list-partitioned table (some columns and all constraints of the sample table have been omitted in this example):
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(30)) 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));
This statement creates a partitioned table part_tab
with two partitions p1 and p2
, and three LOB columns, b
, c
, and d
. The statement uses the sample table pm.print_media
, but the LONG
column press_release
is omitted because LONG
columns are not supported in partitioning.
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 (NEXT 20M)) PARTITION BY RANGE (product_id) (PARTITION p1 VALUES LESS THAN (3000) TABLESPACE tbs_1 LOB (ad_composite, ad_photo) STORE AS (TABLESPACE tbs_2 STORAGE (INITIAL 10M)), PARTITION P2 VALUES LESS THAN (MAXVALUE) LOB (ad_composite, ad_finaltext) STORE AS (TABLESPACE tbs_3) ) TABLESPACE tbs_4;
Partition p1
will be in tablespace tbs_1
. The LOB data partitions for ad_composite
and ad_finaltext
will be in tablespace tbs_2
. The LOB data partition for ad_photo
will be in tablespace tbs_1
. The storage attribute INITIAL
is specified for LOB columns ad_composite
and ad_finaltext
. Other attributes will be inherited from the default table-level specification. The default LOB storage attributes not specified at the table level will be inherited from the tablespace tbs_2
for columns ad_composite
and ad_finaltext
and tablespace tbs_1 for column ad_photo
. LOB index partitions will be in the same tablespaces as the corresponding LOB data partitions. Other storage attributes will be based on values of the corresponding attributes of the LOB data partitions and default attributes of the tablespace where the index partitions reside.
Partition p2
will be in the default tablespace tbs_4
. The LOB data for ad_composite
and ad_photo
will be in tablespace tbs_3
. The LOB data for ad_finaltext
will be in tablespace tbs_4
. The LOB index for columns ad_composite
and ad_photo
will be in tablespace tbs_3
. The LOB index for column ad_finaltext
will be in tablespace tbs_4
.
The sample table oe.product_information
is not partitioned. However, you might want to partition such a large table by hash for performance reasons, as shown in this example. (The tablespace names are hypothetical in this example.)
CREATE TABLE hash_products ( product_id NUMBER(6) , 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 CHECK (product_status in ('orderable' ,'planned' ,'under development' ,'obsolete') ) ) PARTITION BY HASH (product_id) PARTITIONS 5 STORE IN (tbs_1, tbs_2, tbs_3, tbs_4);
The table created in the "Range Partitioning Example" divides data by time of sale. If you plan to access recent data according to distribution channel as well as time, then composite partitioning might be more appropriate. The following example creates a copy of that range_sales
table, but with range-hash composite partitioning. The partitions with the most recent data are subpartitioned with both Oracle-defined and user-defined subpartition names. (Constraints and storage attributes have been omitted from the example).
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) ;
The following examples creates a partitioned table of customers based on the sample table oe.customers
. In this example, the table is partitioned on the credit_limit
column and list subpartitioned on the nls_territory
column. The subpartition template determines the subpartitioning of any subsequently added partitions (unless you override the template by defining individual subpartitions). This composite partitioning makes it possible to query the table based on a credit limit range within a specified region:
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));
Consider object type department_typ
:
CREATE TYPE department_typ AS OBJECT ( d_name VARCHAR2(100), d_address VARCHAR2(200) ); /
Object table departments_obj_t
holds department objects of type department_typ
:
CREATE TABLE departments_obj_t OF department_typ;
The following statement creates object table salesreps
with a user-defined object type, salesrep_typ
:
CREATE OR REPLACE TYPE salesrep_typ AS OBJECT ( repId NUMBER, repName VARCHAR2(64)); CREATE TABLE salesreps OF salesrep_typ;
The following example uses the type department_typ and the table departments_obj_t
(created in "Creating Object Tables: Examples"). A table with a scoped REF
is then created.
CREATE TABLE employees_obj ( e_name VARCHAR2(100), e_number NUMBER, e_dept REF department_typ SCOPE IS departments_obj_t );
The following statement creates a table with a REF
column which has a referential integrity constraint defined on it:
CREATE TABLE employees_obj ( e_name VARCHAR2(100), e_number NUMBER, e_dept REF department_typ REFERENCES departments_obj_t);
This example creates an object type and a corresponding object table whose OID is primary key based:
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;
You can subsequently reference the emp
object table in either of the following two ways:
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, 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') );