CREATE AUXILIARY TABLE statement
The CREATE AUXILIARY TABLE statement creates an auxiliary table at the current server for storing LOB data.
Invocation for CREATE AUXILIARY TABLE
This statement can be embedded in an application program or issued interactively if the value of special register CURRENT RULES is 'DB2' and the table space is explicitly created when the statement is executed. It is an executable statement that can be dynamically prepared only if DYNAMICRULES run behavior is implicitly or explicitly specified.
Do not use this statement if Db2 implicitly creates the auxiliary table. For more information, see LOB table space implicit creation.
Authorization for CREATE AUXILIARY TABLE
The privilege set that is defined below must include at least one of the following:
- The CREATETAB privilege for the database implicitly or explicitly specified by the IN clause
- DBADM, DBCTRL, or DBMAINT authority for the database
- SYSADM or SYSCTRL authority
- System DBADM
- Installation SYSOPR authority (when the current SQLID of the process is set to SYSINSTL)
Privilege set: If the statement is embedded in an application program, the privilege set is the privileges that are held by the owner of the plan or package. If the application is bound in a trusted context with the ROLE AS OBJECT OWNER clause specifies, a role is the owner. Otherwise, an authorization ID is the owner. If the specified table name includes a qualifier that is not the same as this authorization ID, the privilege set must include SYSADM or SYSCTRL authority, DBADM authority for the database, or DBCTRL authority for the database.
If ROLE AS OBJECT OWNER is in effect, the schema qualifier must be the same as the role, unless the role has the CREATEIN privilege on the schema, SYSADM authority, or SYSCTRL authority.
If ROLE AS OBJECT OWNER is not in effect, one of the following rules applies:
- If the privilege set lacks the CREATIN privilege on the schema, SYSADM authority, or SYSCTRL authority, the schema qualifier (implicit or explicit) must be the same as one of the authorization ids of the process.
- If the privilege set includes SYSADM authority or SYSCTRL authority, the schema qualifier can be any valid schema name.
If the statement is dynamically prepared, the privilege set is the privileges that are held by the SQL authorization ID of the process unless the process is within a trusted context and the ROLE AS OBJECT OWNER clause is specified. In that case, the privilege set is the set of privileges that are held by the role that is associated with the primary authorization ID of the process. If the process is in a trusted context, any authorization ID can be the qualifier. However, if the process is not in a trusted context and if the specified table name includes a qualifier that is not the same as the SQL authorization ID of the process, the following rules apply:
- If the privilege set includes SYSADM or SYSCTRL authority (or DBADM authority for the database, or DBCTRL authority for the database when creating a table), the schema qualifier can be any valid schema name.
- If the privilege set lacks SYSADM or SYSCTRL authority (or DBADM authority for the database, or DBCTRL authority for the database when creating a table), the schema qualifier is valid only if it is the same as one of the authorization IDs of the process and the privilege set that are held by that authorization ID includes all1 privileges needed to create the table.
Syntax for CREATE AUXILIARY TABLE
Description for CREATE AUXILIARY TABLE
- AUXILIARY or AUX
- Specifies a table that is used to store the LOB data for a LOB column (or a column with a distinct type that is based on a LOB data type).
- aux-table-name
- Names the auxiliary table. The name, including the implicit or explicit qualifiers, must not identify a table, view, alias, or synonym that exists at the current server, or a table that exists in the SYSIBM.SYSPENDINGOBJECTS catalog table.
- IN database-name.table-space-name or IN table-space-name
- Identifies the table space in which the auxiliary table is created. The name must identify an empty LOB table space that currently exists at the current server. The LOB table space must be in the same database as the associated base table.
If you specify a database and a table space, the table space must belong to the specified database. If you specify only a table space, it must belong to the database that contains the specified table space. If you specify only a table space, this table space must belong to DSNDB04. This type of table space is only created when SET CURRENT RULES='DB2' is specified.
- STORES table-name COLUMN column-name
- Identifies
the base table and the column of that table that is to be stored in
the auxiliary table. If the base table is nonpartitioned, an auxiliary
table must not already exist for the specified column. If the base
table is partitioned, an auxiliary table must not already exist for
the specified column and specified partition.
The encoding scheme for the LOB data stored in the auxiliary table is the same as the encoding scheme for the base table. It is either ASCII, EBCDIC, or UNICODE depending on the value of the CCSID clause when the base table was created.
- APPEND NO or APPEND YES
- Specifies whether append processing is used for the table. The APPEND clause must not be
specified for a table in a work file table
space.
If the base table is in a partition-by-range table space, the APPEND option on the LOB table might be different for each partition (depending if the LOB table space and associated objects for each partition are created explicitly or implicitly). If the base table is in a partition-by-growth table space, the APPEND attributes of LOB table will be inherited by each partition.
- APPEND NO
- Specifies that append processing is not used for the table. For insert and LOAD operations,
Db2 will attempt to place data rows in a
well clustered manner with respect to the value in the row's cluster key columns.
APPEND NO is the default
- APPEND YES
- Specifies that data rows are placed into the table without regard to clustering during the insert and LOAD operations.
- PART integer
- Specifies the partition of the base table for which the auxiliary table is to store the specified column. You can specify PART only if the base table is defined in a partitioned table space, and no other auxiliary table exists for the same LOB column of the base table.
Notes for CREATE AUXILIARY TABLE
- Owner privileges
- There are no specific privileges on an auxiliary table. For more information about ownership of an object, see Authorization, privileges, permissions, masks, and object ownership.
- Determining the number of auxiliary tables to create
-
For partitioned tables, each partition of the base table requires a separate LOB table space, auxiliary table, and auxiliary index for each LOB column.
- Auxiliary tables in LOB table spaces that are logged
- When you create an auxiliary table in a LOB table space that is LOGGED, and the associated base table space is NOT LOGGED, the logging attribute of the LOB table space is implicitly changed to NOT LOGGED and the logging attributes of the base table space and the LOB table space are linked.
- Append processing and unused free space in a table
- An update or delete of LOB data creates some free space in the LOB table that can be used by the next insert. If the table uses append processing, any free space that is not at the end of the table space will not be reused during the insert operation. Any unused free space in the table can be reclaimed by running the REORG utility with either the SHRELEVL REFERENCE or SHRLEVEL CHANGE keywords. The REORG utility is not influenced by the APPEND option.
Example for CREATE AUXILIARY TABLE
CREATE AUX TABLE EMP_PHOTO_ATAB
IN DSN8D12A.PHOTOLTS
STORES DSN8C10.EMP
COLUMN EMP_PHOTO;