DB2 V10.1 for Linux, UNIX, and Windows

创建以及连接到已创建临时表

已创建临时表通过 CREATE GLOBAL TEMPORARY TABLE 语句进行创建。应用程序第一次使用连接来引用已创建临时表时,会将这个已创建临时表的一个专用版本实例化,以供使用该连接的应用程序使用。

关于此任务

与已声明临时表类似,已创建临时表由需要处理数据库数据并且需要将数据处理结果暂时存储在表中的应用程序使用。但是,已声明临时表信息并不会保存在系统目录表中,每个使用该信息的会话都必须定义该信息;相反,已创建临时表信息却保存在系统目录中并且不需要在每个使用该信息的会话中进行定义,从而使其具有持久性并能够通过不同的连接与其他应用程序共享。在可以创建已创建临时表之前,必须存在用户临时表空间。
注: 任何使用该连接的程序所执行的第一个对已创建临时表的隐式或显式引用都将创建给定已创建临时表的空实例。每个引用这个已创建临时表的连接都有自己的唯一已创建临时表实例,该实例在该连接结束后不再存在。

各个连接对已创建临时表名的引用将引用同一个持久已创建临时表定义,但各个连接将引用当前服务器上不同的已创建临时表实例。如果未对所引用的已创建临时表名进行限定,那么将使用应用于 SQL 语句的标准限定规则隐式地对其进行限定。

所有者隐式地对已创建临时表拥有所有表特权,并且有权删除该表。所有者的表特权可以被授予和撤销(可以逐个特权地进行授予和撤销,也可以通过 ALL 子句进行)。另一个授权标识只有被授予已创建临时表的适当特权之后,才能访问该表。

支持索引以及用于修改数据的 SQL 语句(例如 INSERT、UPDATE 和 DELETE)。只能在已创建临时表所在的表空间中创建索引。

对于 CREATE GLOBAL TEMPORARY TABLE 语句:锁定和恢复功能不适用;仅当指定了 LOGGED 子句时,日志记录功能才适用。要了解更多选项,请参阅 CREATE GLOBAL TEMPORARY 语句。

创建临时表不能:
  • 与安全策略相关联
  • 是分区表
  • 是多维集群 (MDC) 表
  • 是插入时间集群 (ITC) 表
  • 是范围集群 (RCT) 的
  • 由复制分发

不能创建基于已创建临时表的具体化查询表 (MQT)。

已创建临时表不支持以下列类型、对象类型以及表或索引操作:
  • XML 列
  • 结构类型
  • 引用类型
  • 约束
  • 索引扩展
  • LOAD
  • LOAD TABLE
  • ALTER TABLE
  • RENAME TABLE
  • RENAME INDEX
  • REORG TABLE
  • REORG INDEX
  • LOCK TABLE

有关更多信息,请参阅 CREATE GLOBAL TEMPORARY TABLE 语句。

示例

   CREATE GLOBAL TEMPORARY TABLE temptbl
      LIKE empltabl
      ON COMMIT DELETE ROWS
      NOT LOGGED
      IN usr_tbsp

此语句创建名为 temptbl 的临时表。对此表定义的列名和列描述与 empltabl 的列名和列描述完全相同。隐式定义只包括 empltab1 中的各个列的列名、数据类型、可空性特征和列缺省值属性。未以隐式方式定义所有其他列属性,其中包括唯一约束、外键约束、触发器和索引。

COMMIT 始终从表中删除行。如果已对该表打开任何 HOLD 游标,那么可以使用 TRUNCATE 语句删除那些游标(速度较快),但在“正常情况”下,必须逐行进行删除。系统不记录对临时表所作的更改。临时表将被放入指定的用户临时表空间 usr tbsp。此表空间必须存在,否则创建此表将失败。

将已创建临时表实例化的应用程序与数据库断开连接时,该应用程序的已创建临时表实例将被删除。