DB2——临时表
⼀、临时表
临时表(TEMPORARYTABLE)通常应⽤在需要定义临时集合的场合。但是,在⼤部分需要临时集合的时候,我们根本就不需要定义临时表。当我们在⼀条SQL语句中只使⽤⼀次临
时集合时,我们可以使⽤来定义临时集合;当我们在⼀条SQL语句中需要多次使⽤同⼀临时集合时,我们可以使⽤;只有当我们在⼀个⼯作单元中的多条SQL语句中使⽤同⼀临时集合
时,我们才需要定义临时表。
可以通过以下三种⽅式定义临时表:
⽅法1:
(
NAMEVARCHAR(10),---姓名
DEPTSMALLINT,---部门
SALARYDEC(7,2)---⼯资
)
ONCOMMITDELETEROWS;
⽅法2:
LIKEstaffINCLUDINGCOLUMNDEFAULTS
WITHREPLACE
ONCOMMITPRESERVEROWS;
⽅法3:
(
SELECT*FROMstaffWHERE
)
DEFINITIONONLY
WITHREPLACE;
⼆、全局声明式临时表
ONCOMMITPRESERVEROWS定义声明式全局临时表定义声明式全局临时表的每个会话拥有⾃⼰的独特的临时表描述。当会话终⽌时,表⾏和临时表描述均会被删除。有如下选项,
可控制commit后临时表的状态:
ONCOMMITDELETEROWS:在执⾏COMMIT操作时,如果表上没有打开WITHHOLD游标,就删除表中的所有⾏。这是默认设置。
ONCOMMITPRESERVEROWS:在执⾏COMMIT语句指定所创建的临时表是会话级临时表,当我们断开连接或⼿动执⾏DELETE或TRUNCATE之前,临时表中的数据⼀直存在,并且
只有当前会话可以看到,其他会话看不到。
ONROLLBACKDELETEROWS:在执⾏ROLLBACK(或ROLLBACKtoSAVEPOINT)操作时,语句指定所创建的临时表是事务级临时表,当COMMIT或ROLLBACK之前,这些数据
⼀直存在,当事务提交之后,表中数据⾃动清除。这是默认设置。
ONROLLBACKPRESERVEROWS:在执⾏ROLLBACK(或ROLLBACKtoSAVEPOINT)操作时,保留表中的所有⾏。
deleterows⽤于事务相关,也就在事务结束后truncatedatainthetemporarytable
withreplace指在程序结束后⾃动删除该临时表
as指字段从另外⼀个表来的意思
definitiononly指创建表的时候不同时进⾏数据插⼊。关键字就是指“只定义⽆数据"只创建表
1.在建表语句中使⽤NOTLOGGEDINITIALLY,只是在建表事务中不记⽇记,并不能关闭这张表的⽇志。
2.如果需要不记录事务⽇志,需要在每个事务的开头使⽤db2altertabledbnameactivateNOTLOGGEDINITIALLY然后做commit.
这⾥的不记⽇志操作,仅仅在同⼀个事务内有效,也就是说,这个事务结束(发出了commit命令)之后,后续操作会重新记录⽇志
3.可以使⽤NOTLOGGEDINITIALLY做清空表的操作。
⽤法:
altertablenolog_tabactivatenotloggedinitiallywithemptytable
commit
prerverows表⽰在会话结束后清除临时表的数据
前者在事务提交后数据就已经清除了.
后者在会话中⽌时或者导常退出时数据都会被清除掉
定义了临时表后,我们可以像使⽤普通表⼀样使⽤临时表。临时表只对定义它的⽤户有效,不同⽤户可以在同⼀时间定义同名的临时表,他们之间互不影响。临时表的⽣命周期是
SESSION,当SESSION关闭时,临时表将⾃动删除,这也是临时表的模式名只能为SESSION的原因。此外,我们还可以给临时表定义索引。更多细节请参考DB2信息中⼼。
----更多参见:
本文发布于:2022-11-24 08:30:49,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/10606.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |