【临时表】

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


1.1. 事务级临时表
? 语法:
CREATE GLOBAL TEMPORARY TABLE table_name
(a number(10), b number(10), ……) on commit delete rows;
? 测试: commit;事务结束后,临时表中的数据自动清空

 

--创建事务级临时表

SQL> create global temporary table t1(x int) on commit

  2  delete rows;

 

Table created.

 

--插入测试数据  

SQL> insert into t1 select rownum from dual connect by   

  2  rownum <=10;

 

10 rows created.

 

--验证,临时表中确实已经存在相应数据

SQL> select count(*) from t1;

 

  COUNT(*)

----------

        10

 

--提交,结束当前事务,也就是说,事务级的临时表已经被清空了  

SQL> commit;

 

Commit complete.

 

--验证临时表,确实已经清空

SQL> select count(*) from t1;

 

  COUNT(*)

----------

         0

1.2. 会话级临时表
? 语法:
CREATE GLOBAL TEMPORARY TABLE table_name
(a number(10), b number(10), ……) on commit PRESERVE rows;
? 测试:commit ;话结束后,临时表中的数据自动清空(事务结束后,数据任然存在)

 

--创建会话级临时表

SQL> create global temporary table t2(x int) on commit preserve rows;

 

Table created.

--插入测试数据

SQL> insert into t2 select rownum from dual connect by

  2  rownum <= 10;

 

10 rows created.

SQL> select count(*) from t2;

 

  COUNT(*)

----------

        10

--提交,结束事务  

SQL> commit;

 

Commit complete.

--再次查询,数据依旧在,因为 t2 表是会话级的临时表

SQL> select count(*) from t2;

 

  COUNT(*)

----------

        10

--退出会话,再次验证数据,表中已经清空

SQL> conn / as sysdba

Connected.

——再进入scott用户下验证:

SQL> conn scott/tiger

Connected.

SQL>

SQL> select count(*) from t2;

 

  COUNT(*)

----------

         0

注:临时表是可以共享的,多个会话可以同时使用一个临时表,互不相干

请使用浏览器的分享功能分享到微信等