oracle 临时表是什么,ORACLE的临时表和虚拟临时表
OCACLE的虚拟表有三种,分别是 事务级临时表、会话级临时表和虚拟临时表,相同点:三种表都不能永久的保存记录。事务级临时表、会话级临时表都是用临时表空间。虚拟临时表连表空间都没有,全在内存里面。不同点:事务级临时表临时表在提交后就回被清空,但是,表结构依然存在。而会话级临时表只有在SESSION 断开后才会被清空,但是,表结构依然存在。虚拟临时表只能在select中使用,并且只对一条语句使用(第
OCACLE的虚拟表有三种,分别是 事务级临时表、会话级临时表和虚拟临时表,
相同点:三种表都不能永久的保存记录。
事务级临时表、会话级临时表都是用临时表空间。
虚拟临时表连表空间都没有,全在内存里面。
不同点:事务级临时表临时表在提交后就回被清空,但是,表结构依然存在。
而会话级临时表只有在SESSION 断开后才会被清空,但是,表结构依然存在。
虚拟临时表只能在select
中使用,并且只对一条语句使用(第二条SQL语句继续用它,就会报找不到对象的错误了),用过后,表结构都没有了。
下面根据我从网上搜的信息,以及自己的经验进行介绍。
环境准备:
本例使用scott用户下的emp表中的数据作为临时表数据
建立事务级临时表:
create global temporary table emp_delete on commit delete
rows
as select * from emp where 1=2
建立会话级临时表create global temporary table emp_preserve on commit
preserve rows
as select * from emp where 1=2
开始试验:
向事务级表插入数据
insert into EMP_DELETE select * from emp
不提交而是在同一个回话中查询这个表的数据
select * from EMP_DELETE 这时候是有数据的。
确认提交
再次查询临时表的数据。
select * from EMP_DELETE
这个时候是没有数据的。在提交的时候,是事务级临时表已经被清空了。
再对会话级临时表做相同的动作。插入数据
insert into EMP_PRESERVE select * from emp
查询
select * from EMP_PRESERVE
确认提交
再次查询
select * from EMP_PRESERVE
仍然有数据。
但是在别的session中却查询不出数据。
select * from EMP_PRESERVE
当我们关闭这个session的窗口时,数据就被清空了。
当我们使用union 将多个结果集区分的时候,可以使用with构建一张虚拟的临时表
With fis as (select * from emp)
select * from fis where empno <7900
union
select * from fis where deptno=20;
如果你再运行 select * from fis;
这个时候就会报错了,因为fis以及不存在了。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)