@oracle 临时表
前几天在项目中遇到一个问题,需求是要备份数据库中的表 ,需求文档上说的是需要用临时表来备份数据,然后就在网上各种找临时表备份数据,最终也用程序实现了,但是在自测项目的时候,看数据库中确实也创建了临时表,但是表中就是没有数据,一直找不到问题所在,后来就百度,才算是找到了为啥没有数据的原因,这个就是临时表的特性,下面就总结一下临时表的相关内容吧。
1.什么是临时表?
临时表就是用来暂时保存一些数据的一个数据库对象,它和数据库中的普通表有一些区别的,它只存储在临时表空间,而不存在用户空间。
2、临时表的分类
oracle表中的临时表只有两种,一种是事务级别的临时表,一种是会话级别的临时表,前者只对当前事务起作用,后者只对当前会话有用,每个会话只能查看和修改自己的数据
3、两种临时表的创建
a.会话级临时表的创建:(${newTable}这个是临时表的表名, ${oldTable}这个是备份表的表名)
CREATE GLOBAL TEMPORARY TABLE ${newTable}
ON COMMIT PRESERVE ROWS
AS
SELECT * FROM ${oldTable}
备注:当会话结束的时候,该临时表的数据会清空,不会一直存在,但临时表的表结构是一直存在的
b.事务级别临时表的创建:
CREATE GLOBAL TEMPORARY TABLE ${newTable}
ON COMMIT DELETE ROWS
AS
SELECT * FROM ${oldTable}
备注:事务级别的临时表,当事务提交或者是回滚的时候,数据都会被清空,但临时表的表结构也是一直存在的