日期:2014-05-16  浏览次数:20483 次

oracle 临时表介绍(整合)

?

在工作中用临时表从A库到B库导入LOB(大)字段,用临时表做中间表进行操作。

?

我的文章是以下两个文章相结合的产物,特在此说明:

前半部分出自:http://www.2cto.com/database/201109/106453.html

后半部分出自:http://www.iteye.com/topic/371390

?

具体内部如下(前半部分是介绍、后半部分是应用):

前半部分,临时表介绍:

?????? 我们知道在数据库中除了可以创建永久表外,还可以建立临时表(temporary table)。那么为什么需要临时表呢?它给我们带来了什么优点?和永久表相比临时表有以下几个优点:

?????? 1.临时表在操作上比永久表要更快。因为临时表不需要往编目表中插入条目,临时表的使用也不需要访问编目表,因此也没有编目表的争用。

?????? 2.仅有创建临时表的app才可以存取临时表,在处理临时表时没有锁。因为临时表的数据只对当前Session有效,每个Session都有自己的临时数据,并且不能访问其他Session的临时表中的数据。因此,临时表不需要DML锁。

?????? 3.如果指定Not Logged选项,处理临时表时不记日志。所以如果有仅在数据库的一个会话中使用的大量的临时数据,这些数据存入临时表能大大提高性能。

?????? 4.临时表的数据不会永久存在(同永久表最大的区别),当一个会话结束或者事务结束的时候,数据库自动清除数据。另外Oracle临时表建立后,不会删除(和Sql-server的不同之处)。

?

临时表详细介绍
Oracle的临时表有两种类型:

临时表分为SESSION、TRANSACTION两种,SESSION级的临时表数据在整个SESSION都存在,直到结束此次SESSION;而TRANSACTION级的临时表数据在TRANACTION结束后消失,即COMMIT/ROLLBACK或结束SESSION都会清除TRANACTION临时表数据。

?????? 1.会话级临时表:(ON COMMIT PRESERVE ROWS)是指数据只在当前会话中有效的临时表。当关闭当前会话或者进行新的连接之后,数据表中的内容就会被清除。?

?????? 2.事务级临时表:(ON COMMIT DELETE ROWS)是指数据只有在当前事务内有效。

?

后半部分,临时表应用:

两种临时表的语法:

一、SESSION级临时表
1、建立临时表

CREATE GLOBAL TEMPORARY TABLE temp_tbl(col_a VARCHAR2(30)) 
ON COMMIT PRESERVE ROWS 

?

2、插入数据

INSERT INTO temp_tbl VALUES ('test session table') ;

?

3、提交commit;
4、查询数据

SELECT * FROM temp_tbl ;

?

可以看到数据'test session table'记录还在。
结束SESSION,重新登录,再查询数据select *from temp_tbl,这时候记录已不存在,因为系统在结束SESSION时自动清除记录

?

二、TRANSACTION级临时表
1、建立临时表??

CREATE GLOBAL TEMPORARY TABLE temp_tbl(col_a VARCHAR2(30))
ON COMMIT DELETE ROWS 

?

2、插入数据

INSERT INTO temp_tbl VALUES ('test transaction table') ;

?

3、提交commit;
4、查询数据

SELECT * FROM temp_tbl ;

?

这时候可以看到刚才插入的记录'test transaction table'已不存在了;同样,如果不提交而直接结束SESSION,重新登录记录也不存在

?

?

?