当前位置: 洪哥笔记 > Oracle > Oracle临时表

 

Oracle临时表


关键词

Oracle 临时表 Session级临时表 Transaction级临时表

摘要

本文介绍Oracle数据库中的一种特殊的表:临时表。Oracle临时表有Session级临时表和Transaction级临时表两种,分别有不同的生命周期。

一、临时表与临时表分类


临时表是在Oracle 8i中引入一种新的表的种类。Oracle数据库中的临时表是一种特殊的表,它可以作为临时保存数据的一种方式。Session级临时表是指在一个会话周期内都数据都是存在的,而一个Transaction级临时表是在Commit或Rollback之后,数据才会被清除。当然,Session结束时,Transaction级临时表数据也会被清除。

二、Session级临时表


创建Session级临时表的代码如下:
create global temporary table <临时表名>(字段列表) on commit preserve rows

大家会有疑问,这个语句里面没有Session这个关键词,怎么知道这个创建临时表的Oracle SQL语句是创建的Session级临时表呢?那么洪哥告诉你,preserve这个关键词就表示为Session级临时表。如果这里的preserve换成了delete,那就成了Transaction级临时表了。

可以做一个实验来演示一下commit提交之后,Session级临时表中的数据不会丢失。

1)创建Session级临时表,表名mytable
create global temporary table mytable(name varchar2(50))
on commit preserve rows
2)往mytalbe表中插入一条数据
insert into mytable values('hello')
3)提交commit
4)查询临时表mytable中的数据
select * from mytalbe

我们可以看到,最后mytable中是有数据的。这说明commit之后,mytable这个Session级临时表中数据并没有消失。但我们结束Session,重新登录,再查询数据select * from mytable,这时候记录已不存在了,因为系统在结束Session时自动清除了记录。


三、Transaction级临时表


创建Transaction级临时表的代码如下:
create global temporary table <临时表名>(字段列表) on commit delete rows

大家看看,这里与Session级临时表创建时的唯一的区别就是把preserve换成了delete。

在测试环节,大家可以像上面Session级临时表一样,创建一个Transaction级临时表,再往里面写入数据。然后在commit之后再查看一下表中是否内容还存在。正确的结果应该是Transaction级临时表在commit之后,数据被清除了。洪哥就不演示了,大家可以照着上面的SQL语句改一下。

关于Oracle临时表,本文就介绍这么多,希望对您有所帮助,谢谢!

 

要饭二维码

洪哥写文章很苦逼,如果本文对您略有帮助,可以扫描下方二维码支持洪哥!金额随意,先行谢过!大家的支持是我前进的动力!

文章的版权

本文属于“洪哥笔记”原创文章,转载请注明来源地址:Oracle临时表:http://www.splaybow.com/post/oracle-temporary-table.html

如果您在服务器运维、网络管理、网站或系统开发过程有需要提供收费服务,请加QQ:8771947!十年运维经验,帮您省钱、让您放心!
亲,如果有需要,先存起来,方便以后再看啊!加入收藏夹的话,按Ctrl+D

« Linux下Orcle数据库导入导出中文乱码解决方法 Oracle数据库中有哪几种表 »