您在这里:首页 > 学员专区 > 技术文章
Oracle视频
Oracle
CUUG课程

管理表(四)--管理临时表

 

1、临时表的概念

临时表(global temporary table):用于电子商务的网上购物

临时表用于存放会话或事务的私有数据。建立临时表后,其结构会一直存在,但其数据只在当前事务内或当前会话内有效。

2、临时表的基础知识

临时表只在Oracle 8i 以及以上产品中支持。ORACLE数据库除了可以保存永久表外,还可以建立临时表temporary tables。这些临时表用来保存一个会话SESSION的数据,或者保存在一个事务中需要的数据。当会话退出或者用户提交commit和回滚rollback事务的时候,临时表的数据自动清空,但是临时表的结构以及元数据还存储在用户的数据字典中。

Oracle的临时表创建之后基本不占用表空间,临时表并非存放在用户的表空间中,而是存放在 Schema 所指定的临时表空间中。如果你没有指定临时表(包括临时表的索引)存放的表空的时候,你插入到临时表的数据是存放在ORACLE系统的临时表空间中(TEMP)。

可以对临时表创建索引,视图,触发器,可以用export和import工具导入导出表的定义,但是不能导出数据。表的定义对所有的会话可见。建立在临时表上的索引也是临时的,也是只对当前会话或者事务有效。

尽管对临时表的DML操作速度比较快,但同样也是要产生 Redo Log,只是同样的DML语句,比对PERMANENT 的DML 产生的Redo Log 少。

3、临时表的不足之处:

(1)不支持lob对象,这也许是设计者基于运行效率的考虑,但实际应用中确实需要此功能时就无法使用临时表了。

(2)不支持主外键关系

4、特性和性能(与普通表和视图的比较)

(1)临时表只在当前连接内有效

(2)临时表不建立索引,所以如果数据量比较大或进行多次查询时,不推荐使用

(3)数据处理比较复杂的时候时表快,反之视图快点

(4)在仅仅查询数据的时候建议用游标: open cursor for 'sql clause';

5、临时表的应用:

对于一个电子商务类网站,不同消费者在网站上购物,就是一个独立的 SESSION,选购商品放进购物车中,最后将购物车中的商品进行结算。也就是说,必须在整个SESSION期间保存购物车中的信息。同时,还存在有些消费者,往往最终结账时放弃购买商品。如果,直接将消费者选购信息存放在最终表(PERMANENT)中,必然对最终表造成非常大的压力。因此,对于这种案例,就可以采用创建临时表(ON COMMIT PRESERVE ROWS)的方法来解决。数据只在 SESSION 期间有效,对于结算成功的有效数据,转移到最终表中后,ORACLE自动TRUNCATE 临时数据;对于放弃结算的数据,ORACLE 同样自动进行 TRUNCATE ,而无须编码控制,并且最终表只处理有效订单,减轻了频繁的DML的压力。

Temp Table 的另一个应用,就是存放数据分析的中间数据。

6、创建临时表

(1)基于事务,在事务提交时,自动删除记录

SQL> create global temporary table

2  temp_01(id int) on commit delete rows;——在事务提交时删除记录

SQL> insert into temp_01 values(1);

SQL> insert into temp_01 values(2);

SQL> select * from temp_01;

ID

----------

1

2

SQL> commit;——提交

Commit complete.

SQL> select * from temp_01;

no rows selected ——记录已经删除了

(2)基于会话,当用户退出session 时,自动删除记录

SQL> create global temporary table

2  temp_02(id int) on commit preserve rows;

Table created.

SQL> insert into temp_02 values(1);

1 row created.

SQL> insert into temp_02 values(2);

1 row created.

SQL> commit;

Commit complete.

SQL> select * from temp_02;——提交还能看到记录

ID

----------

1

2

SQL> conn /as sysdba——会话结束后,记录删除

Connected.

SQL> select * from temp_02;

no rows selected

相关文章 [上一篇] 管理表(三)--删除列的方式
010-88589926(88587026)
CUUG热门培训课程
Oracle DBA就业培训
CUUG名师
网络课程
技术沙龙
最新动态

总机:(010)-88589926,88589826,88587026 QQ讨论群:243729577 182441349 邮箱:cuug_bj@cuug.com
通信地址:北京市海淀区紫竹院路98号北京化工大学科技园609室(CUUG)邮政编码:100089 
中国UNIX用户协会 Copyright 2010  ALL Rights Reserved 北京神脑资讯技术有限公司
京ICP备11008061号  京公网安备110108006275号