在DB2中创建GLOBAL TEMPORARY TABLE
。当我冲浪时,我有两种创建方式1.声明2.创建。
1. DECLARE GLOBAL TEMPORARY TABLE SESSION.TEMP_EMP
(EMPNO CHAR(6) NOT NULL,
SALARY DECIMAL(9, 2),
BONUS DECIMAL(9, 2),
COMM DECIMAL(9, 2)) WITH REPLACE ON COMMIT PRESERVE ROWS ;
2. CREATE GLOBAL TEMPORARY TABLE TMPDEPT
(TMPDEPTNO CHAR(3) NOT NULL,
TMPDEPTNAME VARCHAR(36) NOT NULL,
TMPMGRNO CHAR(6),
TMPLOCATION CHAR(16) ) ON COMMIT PRESERVE ROWS ;
并且从IBM站点获得的信息是创建的,因为它具有持久性,它是最好的,它允许所有用户会话访问相同的表定义,而不必在启动时声明它,还有更多优点。
链接:http://www.ibm.com/developerworks/data/library/techarticle/dm-0912globaltemptable/
而且我在使用create over define时有几个查询:
[使用Replace
时找不到CREATE GLOBAL TEMPORARY TABLE
关键字。
考虑一种情况,正在打开连接并执行存储过程,在该存储过程中创建全局临时表并在该存储过程中调用另一个存储过程再次有same
Create Temp table statement ..在这种情况下会发生什么。这两个表的名称相同且在单个连接内会不会引发任何错误?
声明有会话,没有创建?这和持久性有关吗?
在性能方面哪个更好?声明温度还是创建温度?
建议某些方案以最佳使用声明/创建!
DSNDB07
中创建,这是工作文件数据库(与需要工作存储的SQL语句使用的存储区域相同)。声明的临时表存储在您必须创建的临时表空间中。CTT有一些缺点:
因为它们不是持久性的,所以一些典型的数据库操作包括锁定,日志记录和恢复不适用于已创建临时表。
无法在创建的临时表上创建索引,因此所有访问通过完整的表扫描。
不能在创建的临时表上创建约束。
null是所创建列的唯一允许的默认值临时表。
DB2实用程序无法引用创建的临时表。
无法将创建的临时表指定为UPDATE语句。
从创建的临时表中删除时,所有行必须是删除。
尽管可以在创建的临时表上创建视图,但是WITH无法指定检查选项。
声明的临时表可以具有索引和CHECK约束在它们上定义。
您可以发出UPDATE语句和定位的DELETE语句针对已声明的临时表。
您可以隐式定义已声明的临时表的列并使用SELECT中的结果表。
1。 &2.没有一个。我相信(而且我不确定我们的商店是否准确无误,在所有情况下几乎都使用DTT),一次CTT声明一次(由DBA),然后应用程序程序员可以在任何会话中使用它。每个连接都会拥有自己的副本,一旦应用程序断开连接,该会话中存储在该CTT中的数据将消失。
3。 SESSION
只是DTT的架构标识符。它表明这是暂时的不能持久保存的表。
4。我认为两者的性能差不多。他们会更快而不是普通表,因为锁定,日志记录,恢复等将不适用。
5。总的来说,我会说DTT是要走的路,但CTT是有用(如克雷格在他的文章中所述):
(CTT)在不更新临时数据时应首先考虑是必需的,对临时数据的访问纯粹是顺序的。