一、临时表的介绍:

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. 关于C、OC、C++、OC++、Swift的一些常识

    关于C.OC.C++.OC++.Swift的一些常识 OC是C语言的一个超集,是一门面向对象的语言,因为苹果的崛起而火,API主要是cocoa(OSX)和cocoatouch(iOS),GCC 和 C ...

  2. Mac自定义隐藏或显示文件的快捷键

    Mac自定义隐藏或显示文件的快捷键 本教程教大家学会自定义隐藏和显示文件夹的快捷键(Command+Shift+.). 1. 打开应用程序--Automator--选择"服务"-- ...

  3. echarts html传参+js请求+ashx服务 代码方式

    html 头传参方式 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <hea ...

  4. html 把左框的选中项添加到右框

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. iOS 图片循环滚动(切片效果)

                             #import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <UIAp ...

  6. C# WPF定时器

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来.我们都知道计算机技术发展日新月异,速度惊人的快,你我稍不留神,就会被慢慢淘汰!因此:每日不间断的学习是避免被 ...

  7. IntelliJ IDEA 编译方式介绍

    编译方式介绍 相比较于 Eclipse 的实时自动编译,IntelliJ IDEA 的编译更加手动化,虽然 IntelliJ IDEA 也支持通过设置开启实时编译,但是不建议,因为太占资源了.Inte ...

  8. SQL查询一个表的总记录数的方法

    一.简单查询语句 1. 查看表结构 SQL>DESC emp; 2. 查询所有列 SQL>SELECT * FROM emp; 3. 查询指定列 SQL>SELECT empmo, ...

  9. [转]StuQ 技能图谱(全套13张)

    程序开发语言综述.jpg 前端工程师必备技能.jpg 大数据工程师必备技能.jpg   安全工程师必备技能.jpg 嵌入式开发必备技能.jpg iOS开发工程师必备技能.jpg   移动无线测试工程师 ...

  10. C#: 自定义控件

    (一)复合控件 http://wenku.baidu.com/link?url=y4BdtX3mOer4Hdin019jJpXJLi-2_ehmEo7i08cxEp1OR_3gb5CqaHrnNEB2 ...