oracle 临时表是什么,ORACLE的临时表和虚拟临时表

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以及不存在了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值