ITPub博客

首页 > 数据库 > Oracle > 【临时表】

【临时表】

原创 Oracle 作者:不一样的天空w 时间:2016-10-22 22:32:34 0 删除 编辑

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

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

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

上一篇: 【UNDO】还原数据
请登录后发表评论 登录
全部评论

注册时间:2016-09-22

  • 博文量
    916
  • 访问量
    1400406