`
yhef
  • 浏览: 67221 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Oracle临时表

阅读更多
创建Oracle临时表,可以有两种类型的临时表:

会话级的临时表、事务级的临时表。

1:会话级的临时表因为这这个临时表中的数据和你的当前会话有关系,当你当前SESSION不退出的情况下,临时表中的数据就还存在,而当你退出当前SESSION的时候,临时表中的数据就全部没有了,当然这个时候你如果以另外一个SESSION登陆的时候是看不到另外一个SESSION中插入到临时表中的数据的。即两个不同的SESSION所插入的数据是互不相干的。当某一个SESSION退出之后临时表中的数据就被截断(truncate table,即数据清空)了。会话级的临时表创建方法:

CREATE GLOBAL TEMPORARY TABLE table_name
(col1 TYPE1,col2 TYPE2...) ON COMMIT PRESERVE ROWS;


举例:

 CREATE GLOBAL TEMPORARY TABLE Student
(stu_id NUMBER(5),

class_id NUMBER(5),

Stu_Name VARCHAR2(8),

stu_memo VARCHAR2(200)) ON COMMIT PRESERVE ROWS ;  


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

 CREATE GLOBAL TEMPORARY TABLE table_name

(col1 TYPE1,col2 TYPE2...) ON COMMIT DELETE ROWS;  


举例:

CREATE GLOBAL TEMPORARY TABLE classes_info

(class_id NUMBER(5),

class_name VARCHAR2(8),

class_memo VARCHAR2(200)) ON COMMIT DELETE ROWS; 



3:两中类型临时表的区别

会话级临时表采用on commit preserve rows
而事务级则采用on commit delete rows
用法上,会话级别只有当会话结束临时表中的数据才会被截断,而且事务级临时表则不管是commit 、rollback或者是会话结束,临时表中的数据都将被截断



4:什么时候使用临时表



1)、当某一个SQL语句关联的表在2张及以上,并且和一些小表关联。可以采用将大表进行分拆并且得到比较小的结果集合存放在临时表中

2)、程序执行过程中可能需要存放一些临时的数据,这些数据在整个程序的会话过程中都需要用的等等。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics