oracle中的temporary table用法

一 :使用场景

临时表适合需要把结果集放在内存中的的应用,因为临时表就是一个多DMl操作的结构,临时表的必须先insert然后在updae,select,delete
如果会话rollback,临时表的数据也会丢失
例如:
例如我们网上购物中的购物车,就比较适合用临时表

临时表有两种隔离机制,一种是会话隔离,一种是隔离
会话隔离(PRESERVE ROWS):在当前回话有效,当回话终止后 truncate table
事物隔离(DELETE ROWS):在事物级别有效 当commit 后truncate table

二:索引

对于临时表的索引也是可以创建的,临时表的索引作用范围也是会话级别和事物级别

三:存储空间:

临时表默认的存储空间为临时表空间,不过也可以自己设置表空间

CREATE TEMPORARY TABLESPACE tbs_t1 
    TEMPFILE 'tbs_t1.f' SIZE 50m REUSE AUTOEXTEND ON
    MAXSIZE UNLIMITED
    EXTENT MANAGEMENT LOCAL UNIFORM SIZE 64K;

备份恢复:

由于是临死表,没有日志,备份,恢复的时候也不会恢复

四:eg

CREATE GLOBAL TEMPORARY TABLE admin_work_area
        (startdate DATE,
         enddate DATE,
         class CHAR(20))
      ON COMMIT DELETE ROWS/PRESERVE ROWS;

测试:
创建事物级别的临
CREATE GLOBAL TEMPORARY Table test_tmp
(a Number)
ON COMMIT DELETE ROWS;

--在表中插入数据:  
SQL> insert into test_tmp(a) values(1);

1 row created.

SQL> select *from test_tmp;

 A
----------
 1

--提交事物
SQL> commit;

Commit complete.

SQL> select * from test_tmp;

no rows selected

创建基于会话级别的临时表:

CREATE GLOBAL TEMPORARY Table test_tmp
        (a Number)
      ON Commit PRESERVE  ROWS;
当前会话:     
SQL> select sid from v$session where sid=(select sid from v$mystat where rownum=1);

    SID
----------
    41

--插入数据
SQL> insert into test_tmp(a) values(1);

1 row created.

SQL> select * from test_tmp;

     A
----------
     1
--提交事物
SQL> commit;

Commit complete.

SQL> select * from test_tmp;

     A
----------
     1

另起一个会话:

SQL> Select Sid From v$session t Where t.sid=(Select Sid From v$mystat Where Rownum=1);

    SID
----------
    43

SQL> select * from test_tmp;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值