Oracle - 临时表(GLOBAL TEMPORARY TABLE)  


  文章声明



作者:傲风




环境

Oracle 9i,Oracle 10G


 


描述

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


    可以对临时表创建索引,视图,出发器,可以用export和import工具导入导出表的定义,但是不能导出数据。表的定义对所有的会话可见。


    临时表只在oracle8i以及以上产品中支持。



1、两种临时表:


名称

描述

 会话临时表

 保存当前会话(session)用到的数据,数据会话期间存在,每次提交后ORACLE将截断表(删除全部行)。

 事务临时表

 保存当前事务用到的数据,数据只在事务期间存在,当中断会话时ORACLE将截断表。

会话的数据对于当前会话私有,每个会话只能看到并修改自己的数据,DML锁不会加到

临时表的数据上。


2、如何建立临时表。


  • 新建会话临时表语法

CREATE GLOBAL TEMPORARY TABLE <TABLE_NAME> ( 
   
     <column specification> 
   
 ) ON COMMIT PRESERVE ROWS;



  • 新建事务临时表语法

CREATE GLOBAL TEMPORARY TABLE <TABLE_NAME> ( 
   
     <column specification> 
   
 ) ON COMMIT DELETE ROWS;


3、示例。


  • 新建会话临时表

CREATE GLOBAL TEMPORARY TABLE <TABLE_NAME> ( 
   
     user_name varchar2(30) not null, 
   
     birthday      date 
   
 ) ON COMMIT PRESERVE ROWS;



  • 新建事务临时表

CREATE GLOBAL TEMPORARY TABLE <TABLE_NAME> ( 
   
     user_name varchar2(30) not null, 
   
     birthday      date 
   
 ) ON COMMIT DELETE ROWS;