CREATE AUXILIARY TABLE 语句
CREATE AUXILIARY TABLE 语句在当前服务器上创建一个辅助表,用于存储 LOB 数据。
调用 CREATE AUXILIARY TABLE
此语句可以嵌入应用程序中,也可以交互式地发出,前提是特殊寄存器CURRENT RULES的值为“ DB2 ',并且在执行语句时明确创建了表空间。 这是一个可执行语句,只有在隐式或显式指定了DYNAMICRULES运行行为时,才能动态准备。
如果 Db2 隐式创建辅助表,则不要使用此语句。 更多信息,请参阅 LOB表空间隐式创建。
授权 CREATE AUXILIARY TABLE
以下定义的特权套装必须至少包含以下一项:
- IN子句隐式或显式指定的数据库的CREATETAB权限
- 数据库的DBADM、DBCTRL或DBMAINT权限
- SYSADM 或 SYSCTRL 权限
- 系统 DBADM
安装 SYSOPR 权限(当前进程的 SQLID 设置为 SYSINSTL 时)
权限设置:
如果语句嵌入到应用程序中,权限集就是计划或软件包所有者所拥有的权限。 如果应用程序在受信任上下文中绑定了 ROLE AS OBJECT OWNER 子句,则角色就是所有者。 否则,授权 ID 就是所有者。 如果指定的表名包含与本授权ID不同的限定符,则权限集必须包含SYSADM或SYSCTRL权限、数据库的DBADM权限或数据库的DBCTRL权限。
如果“作为对象所有者的角色”生效,则模式限定符必须与角色相同,除非角色具有对模式的 CREATEIN 权限、SYSADM 权限或 SYSCTRL 权限。
如果“作为物品拥有者的角色”未生效,则适用以下规则之一:
- 如果特权集缺少模式上的 CREATEIN 特权、SYSADM 权限或 SYSCTRL 权限,则模式限定符(隐式或显式)必须与进程的授权 ID 之一相同。
- 如果特权集包括 SYSADM 权限或 SYSCTRL 权限,则模式限定符可以是任何有效的模式名称。
如果语句是动态准备的,则权限集是指进程的SQL授权ID 所拥有的权限,除非该进程处于可信环境中,并且指定了ROLE AS OBJECT OWNER子句。 在这种情况下,特权集是指与流程的主要授权ID关联的角色所拥有的一组特权。 如果流程在可信的环境中进行,则任何授权ID都可以作为限定符。 但是,如果进程不在可信环境中,并且指定的表名包含与进程的 SQL 授权 ID 不同的限定符,则适用以下规则:
- 如果特权集包括 SYSADM 或 SYSCTRL 权限(或用于数据库的 DBADM 权限,或用于创建表的数据库的 DBCTRL 权限),则模式限定符可以是任何有效的模式名称。
- 如果特权集缺少 SYSADM 或 SYSCTRL 权限(或创建表时缺少数据库的 DBADM 权限或数据库的 DBCTRL 权限),则模式限定符只有在与进程的授权 ID 之一相同时才有效,并且该授权 ID 包含创建表所需的所有1 权限。
语法 CREATE AUXILIARY TABLE
描述 CREATE AUXILIARY TABLE
- 辅助或辅助
- 指定一个表,用于存储LOB列(或基于LOB数据类型的不同类型的列)的LOB数据。
- aux-table-name
- 命名辅助表。 该名称(包括隐式或显式限定符)不得标识当前服务器上存在的表、视图、别名或同义词,也不得标识 SYSIBM.SYSPENDINGOBJECTS 目录表中存在的表。
- 在 database-name.table-space-name 或IN table-space-name
- 标识创建辅助表的表空间。 该名称必须标识当前服务器上当前存在的空LOB表空间。 LOB表空间必须与关联的基础表位于同一数据库中。
如果您指定了数据库和表空间,则表空间必须属于指定的数据库。 如果只指定了表空间,则该表空间必须属于包含指定表空间的数据库。 如果您只指定了表空间,则该表空间必须属于 DSNDB04。 仅当指定了 SET CURRENT RULES=' DB2 '时才会创建。
- STORES 表名 COLUMN 列名
- 标识要存储在辅助表中的主表和主表中的列。 如果基础表是非分区表,则指定列不能已有辅助表。 如果基础表被分区,则指定列和指定分区不能已有辅助表。
辅助表中存储的LOB数据的编码方案与主表的编码方案相同。 根据创建基础表时CCSID子句的值,可以是ASCII、EBCDIC或UNICODE。
- APPEND NO 或者 APPEND YES
- 指定是否对表格使用追加处理。 工作文件表空间中的表不能指定APPEND子句。
如果基础表位于分区按范围表空间中,则LOB表上的APPEND选项对于每个分区可能有所不同(取决于LOB表空间和每个分区的关联对象是显式创建还是隐式创建)。 如果基础表位于分区增长表空间中,则LOB表的APPEND属性将由每个分区继承。
- APPEND NO
- 指定不使用追加处理。 对于插入和加载操作, Db2 会尝试根据数据行中簇键列的值,以良好的簇化方式将数据行放置。
APPEND NO是默认值
- APPEND YES
- 指定在插入和加载操作期间,数据行被放置到表中时无需考虑聚类。
- PART 整数
- 指定辅助表在其中存储指定列的基表的分区。 仅当基础表在分区表空间中定义,且基础表的同一 LOB 列没有其他辅助表时,才能指定 PART。
创建辅助表格的注意事项
- 车主特权
- 辅助表上没有特定的权限。 有关对象所有权的更多信息,请参阅授权、特权、权限、掩码和对象所有权。
- 确定要创建的辅助表的数量
对于分区表,基础表的每个分区都需要单独的LOB表空间、辅助表以及每个LOB列的辅助索引。
- LOB表格空间中的辅助表格已记录
- 当您在已记录的 LOB 表空间中创建辅助表,且关联的基础表空间未记录时,LOB 表空间的记录属性将隐式更改为未记录,且基础表空间和 LOB 表空间的记录属性将链接。
- 在表格中添加处理和未使用的可用空间
- 更新或删除LOB数据会在LOB表中产生一些可用空间,供下一次插入使用。 如果表使用追加处理,则插入操作期间不会重复使用不在表空间末尾的任何可用空间。 使用SHRELEVL REFERENCE或SHRLEVEL CHANGE关键字运行REORG实用程序,可以回收表中任何未使用的可用空间。 REORG实用程序不受APPEND选项的影响。
示例 CREATE AUXILIARY TABLE
CREATE AUX TABLE EMP_PHOTO_ATAB
IN DSN8D12A.PHOTOLTS
STORES DSN8C10.EMP
COLUMN EMP_PHOTO;