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 AUXILIARYAUX TABLEaux-table-nameIN 数据库名称. 表格空间名称STOREStable-nameAPPEND NOAPPEND YESCOLUMN列名PART整数

描述 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

假设在示例员工表 DSN8C10.EMP 中,为每位员工的照片添加了一个名为 EMP_PHOTO 的列,数据类型为 BLOB( 110K )。 创建辅助表EMP_PHOTO_ATAB,用于在LOB表空间 DSN8D12A.PHOTOLTS 中存储BLOB列的BLOB数据。
   CREATE AUX TABLE EMP_PHOTO_ATAB
      IN DSN8D12A.PHOTOLTS
      STORES DSN8C10.EMP
      COLUMN EMP_PHOTO;
1 例外:CREATETAB权限在进程的SQL授权ID上被检查。