一、临时表的介绍:

Oracle的临时表只存在于某个会话或者事物的生命周期里,此时临时表中的数据只对当前这个会话可见。

临时表经常被用于存放一个操作的中间数据(数据处理的中间环节)。

临时表由于不产生redo,能够提高数据操作的性能。

二、临时表的创建:

创建Oracle临时表,可以用两种类型的临时表:

a、会话级的临时表

b、事务级的临时表

2.1、会话级的临时表因为这个临时表中的数据和你的当前会话有关系,当你当前SESSION不退出的情况下,临时表中的数据就还存在,而当你退出当前SESSION的时候,临时表中的数据就全部没有了,当然这个时候你如果以另外一个SESSION登陆的时候是看不到另外一个SESSION中插入到临时表中的数据的。即两个不同的SESSION所插入的数据是互不相干的。当某一个SESSION退出之后临时表中的数据就被截断(truncate table,即数据清空)了。会话级的临时表的创建方法:

 ----创建会话级临时表jack_tmp_session----
1 SQL> create global temporary table jack_tmp_session on commit preserve rows as select * from dba_objects where 1=2; 表已创建。 SQL> select table_name,temporary,duration,tablespace_name from user_tables where table_name='JACK_TMP_SESSION'; TABLE_NAME T DURATION TABLESPACE_NAME
------------------------------ - ------------------------------ ------------------------------
JACK_TMP_SESSION Y SYS$SESSION SQL> select count(*) from JACK_TMP_SESSION; COUNT(*)
----------
0 SQL> select sid from v$mystat where rownum=1; SID
----------
38 ----往表里面插入一下数据,并且执行commit,发现数据没有丢失----
SQL> insert into JACK_TMP_SESSION select * from dba_objects; 已创建72511行。 SQL> select count(*) from JACK_TMP_SESSION; COUNT(*)
----------
72511 SQL> commit; 提交完成。 SQL> select count(*) from JACK_TMP_SESSION; COUNT(*)
----------
72511 ----从另外一个SESSION中查询JACK_TMP_SESSION表,发现没有数据,说明两个不同的SESSION所插入的数据是互不相干的----
SQL> select sid from v$mystat where rownum=1; SID
----------
26 SQL> select count(*) from JACK_TMP_SESSION; COUNT(*)
----------
0 ----从SESSION38中退出SQLPLUS,再进去,发现数据没有了----
SQL> exit;
从 Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options 断开
[oracle@rhel5 ~]$ ./rlwrap SQL*Plus: Release 11.2.0.1.0 Production on 星期三 11月 13 14:59:28 2013 Copyright (c) 1982, 2009, Oracle. All rights reserved. SQL> conn echo/echo
已连接。
SQL> select count(*) from JACK_TMP_SESSION; COUNT(*)
----------
0

2.2、事务级临时表是指该临时表
    事务级临时表是指临时表与事务相关,当进行事务提交或者事务回滚的时候,临时表中的数据将自行被截断,其他的内容和会话级的临时表一致(包括退出SESSION的时候,事务级临时表也会被自动截断)。事务级临时表的创建方法:

 SQL> create global temporary table jack_tmp_transaction on commit delete rows as select * from dba_objects where 1=2;

 表已创建。

 SQL> set linesize 200;
SQL> select table_name, temporary, DURATION from user_tables where table_name='JACK_TMP_TRANSACTION'; TABLE_NAME T DURATION
------------------------------ - ------------------------------
JACK_TMP_TRANSACTION Y SYS$TRANSACTION SQL> select count(*) from JACK_TMP_TRANSACTION; COUNT(*)
----------
0 SQL> insert into JACK_TMP_TRANSACTION select * from dba_objects; 已创建72512行。 SQL> select count(*) from JACK_TMP_TRANSACTION; COUNT(*)
----------
72512 SQL> commit; 提交完成。 SQL> select count(*) from JACK_TMP_TRANSACTION; COUNT(*)
----------
0

2.3、两种类型临时表的区别
    会话级临时表采用on commit preserve rows;而事务级则采用on commit delete rows;用法上,会话级别只有当会话结束临时表中的数据才会被截断,而且事务级临时表则不管是commit、rollback或者是会话结束,临时表中的数据都将被截断。

2.4、什么时候使用临时表

1)、当某一个SQL语句关联的表在2张以上,并且和一些小表关联。可以采用将大表进行分拆并且得到比较小的结果集合存放在临时表中;

2)、程序执行过程中可能需要存放一些临时的数据,这些数据在整个程序的会话过程中都需要用的等等。

Oracle 临时表的更多相关文章

  1. ORACLE临时表总结

    临时表概念 临时表就是用来暂时保存临时数据(亦或叫中间数据)的一个数据库对象,它和普通表有些类似,然而又有很大区别.它只能存储在临时表空间,而非用户的表空间.ORACLE临时表是会话或事务级别的,只对 ...

  2. ORACLE临时表空间

    ORACLE临时表空间总结 2014-10-05 11:35 by 潇湘隐者, 临时表空间概念 临 时表空间用来管理数据库排序操作以及用于存储临时表.中间排序结果等临时对象,当ORACLE里需要用到S ...

  3. ORACLE临时表总结(转载)

    转载地址:http://www.cnblogs.com/kerrycode/p/3285936.html 临时表概念 临时表就是用来暂时保存临时数据(亦或叫中间数据)的一个数据库对象,它和普通表有些类 ...

  4. Oracle临时表GLOBAL TEMPORARY TABLE

    临时表:像普通表一样,有结构,但是对数据的管理上不一样,临时表存储事务或会话的中间结果集,临时表中保存的数据只对当前 会话可见,所有会话都看不到其他会话的数据,即使其他会话提交了,也看不到.临时表不存 ...

  5. 详解Oracle临时表的几种用法及意义

    Oracle临时表可以说是提高数据库处理性能的好方法,在没有必要存储时,只存储在Oracle临时表空间中.希望本文能对大家有所帮助. 1 .前言 Oracle Logo 目前所有使用 Oracle 作 ...

  6. Oracle临时表(Temporary Table)

    GLOBAL TEMPORARY代表全局临时表临时表的元数据存储在数据字典里面 只当第一条DML命令发生的时候才为这张表的段分配空间 临时表数据的可见范围应该是会话级别或是事务级别的 会话或者事务级别 ...

  7. ORACLE 临时表空间清理

    Oracle临时表空间主要用来做查询和存放一些缓冲区数据.临时表空间消耗的主要原因是需要对查询的中间结果进行排序.临时表空间的主要作用: 索引create或rebuildOrder by 或 grou ...

  8. ORACLE临时表总结[转]

    临时表概念 临时表就是用来暂时保存临时数据(亦或叫中间数据)的一个数据库对象,它和普通表有些类似,然而又有很大区别.它只能存储在临时表空间,而非用户的表空间.ORACLE临时表是会话或事务级别的,只对 ...

  9. oracle 临时表学习

    临时表概念 临时表就是用来暂时保存临时数据(亦或叫中间数据)的一个数据库对象,它和普通表有些类似,然而又有很大区别.它只能存储在临时表空间,而非用户的表空间.ORACLE临时表是会话或事务级别的,只对 ...

随机推荐

  1. 一网打尽当下NoSQL类型、适用场景及使用公司

    在过去几年,关系型数据库一直是数据持久化的唯一选择,数据工作者考虑的也只是在这些传统数据库中做筛选,比如SQL Server.Oracle或者是MySQL.甚至是做一些默认的选择,比如使用.NET的一 ...

  2. os模块 关于路径问题使用

    os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相当于shell下cd os.curd ...

  3. 防止IE不支持console.log报错

    function log(msg){ if (window["console"]){//判断是否是IE console.log(msg); } }

  4. devexpress13学习系列(一)PDFViewer(2)

    DevExpress.XtraPdfViewer Namespace 该命名空间下,保留着pdfviewer组件需要的类,主要有:   Class Description   PdfCurrentPa ...

  5. UVa 10007 - Count the Trees(卡特兰数+阶乘+大数)

    题目链接:UVa 10007 题意:统计n个节点的二叉树的个数 1个节点形成的二叉树的形状个数为:1 2个节点形成的二叉树的形状个数为:2 3个节点形成的二叉树的形状个数为:5 4个节点形成的二叉树的 ...

  6. csuoj 1120: 病毒

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1120 1120: 病毒 Time Limit: 3 Sec  Memory Limit: 128 ...

  7. [转]史上最全的MSSQL复习笔记

    阅读目录 1.什么是SQL语句 2.使用sql语句创建数据库和表 3.创建数据表 4.数据完整性约束 5.四中基本字符类型说明 6.SQL基本语句 7.类型转换函数 8.日期函数 9.数学函数 10. ...

  8. Java基础(50):二分法查找的非递归实现和递归实现(完整代码可运行,参考VisualGO理解更佳)

    一.概念 二分查找算法也称折半查找,是一种在有序数组中查找某一特定元素的搜索算法. 二.算法思想 搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束:如果某一特定元素大于或者 ...

  9. Could not create the view: An unexpected exception was thrown.问题解决

    Could not create the view: An unexpected exception was thrown.问题解决 今天打开Myeclipse10的时候,发现server窗口出现一堆 ...

  10. bzoj4137 [FJOI2015]火星商店问题

    比较容易想到的做法是线段树套字典树,修改操作时在字典树上经过的节点维护一个最近被访问过的时间,这样询问操作只经过满足时间条件的节点,时间复杂度O(NlogN^2)但是因为线段树每个节点都要套个字典树, ...