码迷,mamicode.com
首页 > 数据库 > 详细

Oracle临时表的功能与应用

时间:2019-06-12 10:38:37      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:bcg   iis   ORC   功能   内容   icc   int   ota   test   

什么是临时表,用户做一个操作查询出几百几千条数据,我们可以把数据放在内存中。当有很多用户都这样做,内存空间不足,这个时候就需要把数据保存在磁盘上。对于 oracle 就提供了一种临时表用于存放这些数据。
 
事务级
会话级
 
on commit preserve rows --session 临时表
on commit delete rows --transaction 临时表
 
下面演示创建一个事务级别与会话级别的两个临时表
 
SQL> conn test/test
Connected.
SQL> desc test; 
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER
 NAME                                               VARCHAR2(10)

 

在 sys 下创建 sessione 级别的临时表
SQL> conn / as sysdba
Connected.
SQL> create global temporary table session_test on commit preserve rows as select * from test.test;
Table created.
SQL> commit; Commit complete.

  

on commit preserve rows 表示创建的表是 session 级别,只要用户不退出,临时表一直有效。
 
SQL> select * from session_test;

        ID NAME
---------- ----------
         0 orcl
         1 orcl
         3 orcl
         2 orcl

  

退出并重新进入,并验证表内容是否存在。

SQL> exit
……

SQL> select * from session_test; no rows selected SQL>

  

查看 session 级别的临时表在断开连接后,重新登录查看变为空了。

 

接下来创建事务级别的临时表

SQL> create global temporary table transaction_test on commit delete rows as select * from test.test;

Table created.

  

on commit delete rows 表示创建的表是事务级别,这个临时表的作用范围只在一个事务内有效。

验证事务临时表的作用范围:
虽然是 copy 的 test.test 表,但是依然是没有数据。

SQL> select * from transaction_test;

no rows selected

  

接下来添加数据到事务临时表 transaction_test

SQL> insert into transaction_test select * from test.test; 

4 rows created.

SQL> select * from transaction_test;

        ID NAME
---------- ----------
         0 orcl
         1 orcl
         3 orcl
         2 orcl

  

如上我们将 test.test 表的内容插入到了 transaction_test 表中,然后直接查询,能查到刚刚插入的数据。

接下来提交,并查询。(提交相当于提交事务,也就是一个事务的结束)

SQL> select * from transaction_test;

        ID NAME
---------- ----------
         0 orcl
         1 orcl
         3 orcl
         2 orcl

SQL> commit;

Commit complete.

SQL> select * from transaction_test;

no rows selected

  

由此可见

会话级别的临时表,只要会话不断开,临时表一直有效,会话断开后,临时表内容清空;
事务级别的临时表,只在一个事务内有效,事务提交后,临时表内容清空。

 

Oracle临时表的功能与应用

标签:bcg   iis   ORC   功能   内容   icc   int   ota   test   

原文地址:https://www.cnblogs.com/black-start/p/11007967.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!