读书人

oracle 临时表 基于事宜 会话

发布时间: 2012-07-19 16:02:20 作者: rapoo

oracle 临时表 基于事务 会话

转贴:http://lanyan-lan.iteye.com/blog/867885

临时表的特点:?

1. 多用户操作的独立性:对于使用同一张临时表的不同用户,ORACLE都会分配一个独立的临时表,这样就避免了多个用户在对同一张临时表操作时发生交叉,从而保证了多个用户操作的并发性和独立性;?

2. 数据的临时性:既然是临时表,顾名思义,存放在该表中的数据是临时性的。ORACLE根据你创建临时表时指定的参数(On Commit Delete Rows / On Commit Preserve Rows),自动将数据TRUNCATE掉。?

临时表的不足:?

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

2. 不支持主外键关系。?

临时表用于何处?

在对多表做关联查询时,其中每张表的数据量都比较大,而多表关联后,所得到的结果集确是相当的小且查询的结果的速度比较快,那么这时可以考虑用临时表。?

临时表分两种类型的临时表:?

1. 会话级临时表?

2. 事物级临时表?

临时表:顾明思义,存在该表的数据是临时的。?

会话临时表:该临时表肯定与会话有关。会话在不退出时,则些临时表中的数据存在,会话退出,该临时表中的数据也会随之消失。在多用户操作的情况下,一个会话从来不阻塞另一个会话使用临时表。即使锁定临时表,一个会话也不会阻塞其他会话使用临时表。其语法为:?

Create global temporary table table_name?

(col1 type1, col2 type2 …)?

On commit preserve rows;?

示例:?

Create global temporary table temp_emp?

(empno number(8),?

Ename varchar2(30),?

Sal??? number(8,2)?

)?

On commit preserve rows;?



事物临时表:指该临时表与事务相关,当进行事务提交或者事务回滚的时候,临时表中的数据将自行被截断,其他的内容和会话级的临时表的一致(包括退出SESSION的时候,事务级的临时表也会被自动截断)。语法为:?

Create global temporary table table_name?

(col1 type1, col2 type2 …)?

On commit delete rows;?

示例:?

Create global temporary table temp_dept?

(d_no????? number(4),?

D_name?? varchar2(30),?

D_num??? number(8)?

)?

On commit delete rows;?



会话临时表和事物临时表的区别:?

在语法上,会话临时表采用on commit preserve rows,而事物临时表采用on commit delete rows;在用途上,会话级临时表只会在会话结束时,临时表中的数据才会被截断。而事物临时表则不管是在事物提交(commit)、事物回滚(rollback)或会话结束,临时表中的数据都会被截断。?

读书人网 >其他数据库

热点推荐