oracle临时表的用法

今天头脑中想了下,在以前工作中(或学习中研究过)的一些技术,多少还能有些印像,而对临时表的语法却相对模糊,用途却还有些记忆(在工作中为更改数据库业务处理时性能问题,而引入了临时表)。因此为加强对临时表的温故,将之写入到空间。以后会继续将以前用到的技术搬到空间来,以便随时温故。

临时表的特点:

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)或会话结束,临时表中的数据都会被截断。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/20948385/viewspace-665818/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/20948385/viewspace-665818/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值