oracle GLOBAL TEMPORARY 临时表

2、详细介绍
会话级临时表是指临时表中的数据只在会话生命周期之中存在,当用户退出会话结束的时候,Oracle自动清除临时表中数据。
事务级临时表是指临时表中的数据只在事务生命周期中存在。当一个事务结束(commit or rollback),Oracle自动清除临时表中数据。
3、建立临时表
临时表的定义对所有会话SESSION都是可见的,但是表中的数据只对当前的会话或者事务有效.
建立方法:
1) ON COMMIT DELETE ROWS 定义了建立事务级临时表的方法.
EXAMPLE:
SQL> CREATE GLOBAL TEMPORARY TABLE admin_work_area
2 (startdate DATE,
3 enddate DATE,
4 class CHAR(20))
5 ON COMMIT DELETE ROWS; -- 事务级别
SQL> create table permernate( a number);
SQL> insert into admin_work_area values(sysdate,sysdate,'temperary table');
SQL> insert into permernate values(1);
SQL> commit; --事务提交
SQL> select * from admin_work_area; -- 从缓存表中查不到数据
SQL> select * from permernate;
A(列名)
----------
1

2)ON COMMIT PRESERVE ROWS
会话1:
SQL> drop table admin_work_area;
SQL> CREATE GLOBAL TEMPORARY TABLE admin_work_area
2 (startdate DATE,
3 enddate DATE,
4 class CHAR(20))
5 ON COMMIT PRESERVE ROWS;
SQL> insert into permernate values(2);
SQL> insert into admin_work_area values(sysdate,sysdate,'session temperary');
SQL> commit; --提交事务
SQL> select * from permernate;
A(列明)
----------
1(事务性临时表例子中插入的数据)
2

SQL> select * from admin_work_area; --查询临时表有值,因为还在同一session中

STARTDATE ENDDATE CLASS
---------- ---------- --------------------
17-1?? -03 17-1?? -03 session temperary

会话2:
SQL> select * from permernate;
A
----
1
2
SQL> select * from admin_work_area; -- 每个会话只能看到自身的数据
未选择行.
会话2看不见会话1中临时表的数据.

总结:会话或事务性临时表用来定义会话时临时表中数据的生命周期。临时表结构对于每个session来说都可见,而数据是每个session一份,类似于java中的私有变量一样;
其实不用去特别的记忆,从名字上就可以区分,如下:
ON COMMIT DELETE ROWS : 表明提交的时候删除数据;
ON COMMIT PRESERVE ROWS :表明提交的时候保存数据;
所以,在一次会话中执行了commit语句后,从事务性临时表中获取不到数据,而从会话临时表中可以获取到数据,就像上面例子中的演示。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值