Oracle 临时表
一、临时表的介绍:
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 临时表的更多相关文章
- ORACLE临时表总结
临时表概念 临时表就是用来暂时保存临时数据(亦或叫中间数据)的一个数据库对象,它和普通表有些类似,然而又有很大区别.它只能存储在临时表空间,而非用户的表空间.ORACLE临时表是会话或事务级别的,只对 ...
- ORACLE临时表空间
ORACLE临时表空间总结 2014-10-05 11:35 by 潇湘隐者, 临时表空间概念 临 时表空间用来管理数据库排序操作以及用于存储临时表.中间排序结果等临时对象,当ORACLE里需要用到S ...
- ORACLE临时表总结(转载)
转载地址:http://www.cnblogs.com/kerrycode/p/3285936.html 临时表概念 临时表就是用来暂时保存临时数据(亦或叫中间数据)的一个数据库对象,它和普通表有些类 ...
- Oracle临时表GLOBAL TEMPORARY TABLE
临时表:像普通表一样,有结构,但是对数据的管理上不一样,临时表存储事务或会话的中间结果集,临时表中保存的数据只对当前 会话可见,所有会话都看不到其他会话的数据,即使其他会话提交了,也看不到.临时表不存 ...
- 详解Oracle临时表的几种用法及意义
Oracle临时表可以说是提高数据库处理性能的好方法,在没有必要存储时,只存储在Oracle临时表空间中.希望本文能对大家有所帮助. 1 .前言 Oracle Logo 目前所有使用 Oracle 作 ...
- Oracle临时表(Temporary Table)
GLOBAL TEMPORARY代表全局临时表临时表的元数据存储在数据字典里面 只当第一条DML命令发生的时候才为这张表的段分配空间 临时表数据的可见范围应该是会话级别或是事务级别的 会话或者事务级别 ...
- ORACLE 临时表空间清理
Oracle临时表空间主要用来做查询和存放一些缓冲区数据.临时表空间消耗的主要原因是需要对查询的中间结果进行排序.临时表空间的主要作用: 索引create或rebuildOrder by 或 grou ...
- ORACLE临时表总结[转]
临时表概念 临时表就是用来暂时保存临时数据(亦或叫中间数据)的一个数据库对象,它和普通表有些类似,然而又有很大区别.它只能存储在临时表空间,而非用户的表空间.ORACLE临时表是会话或事务级别的,只对 ...
- oracle 临时表学习
临时表概念 临时表就是用来暂时保存临时数据(亦或叫中间数据)的一个数据库对象,它和普通表有些类似,然而又有很大区别.它只能存储在临时表空间,而非用户的表空间.ORACLE临时表是会话或事务级别的,只对 ...
随机推荐
- c语言之内存的申请malloc() 和释放free()
c语言之内存的申请malloc() 和释放free() 1.如何使用 malloc 函数 malloc是一个函数,专门用来从堆上分配内存.使用malloc函数需要几个要求: 内存分配给谁?分配多大内存 ...
- Java静态代码分析工具——FindBugs插件的安装与使用
1 什么是FindBugs FindBugs 是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题.有了静态分析工具,就可以在不实际运行程序的情况对软件进行分 ...
- Java 找到数组中两个元素相加等于指定数的所有组合
思路1:可以用hash表来存储数组中的元素,这样我们取得一个数后,去判断sum - val 在不在数组中,如果在数组中,则找到了一对二元组,它们的和为sum,该算法的缺点就是需要用到一个hash表,增 ...
- [PCL]2 点云法向量计算NormalEstimation
从GitHub的代码版本库下载源代码https://github.com/PointCloudLibrary/pcl,用CMake生成VS项目,查看PCL的源码位于pcl_features项目下 1. ...
- iOS使用NSMutableAttributedString 实现富文本(不同颜色字体、下划线等)
在iOS开发中,常常会有一段文字显示不同的颜色和字体,或者给某几个文字加删除线或下划线的需求.之前在网上找了一些资料,有的是重绘UILabel的textLayer,有的是用html5实现的,都比较麻烦 ...
- ajax异步提交文件
首先 下载jquery和jquery.form.js http://malsup.com/jquery/form/ <script type="text/javascript&qu ...
- [c++基本语法]——构造函数初始化列表
c++构造函数初始化成员变量列表: #pragma once class Node { public: int data; // 权值 Node *parent; // 父节点 Node *left; ...
- Java内存分配全面浅析
本文将由浅入深详细介绍Java内存分配的原理,以帮助新手更轻松的学习Java.这类文章网上有很多,但大多比较零碎.本文从认知过程角度出发,将带给读者一个系统的介绍. 进入正题前首先要知道的是Java程 ...
- 实验十五_安装新的int 9中断例程
安装一个新的int 9中断例程,功能:在DOS下,按下“A”键后,除非不在松开, 如果松开,就显示满屏幕的“A”:其他的键照常处理. 提示:按下一个键时产生的扫描码称为通码,松开一个键产生的扫描 ...
- PostgreSQL中关于关键字(保留字)在表名和字段名中的应用文件解决
标识符和关键词 受限标识符或被引号修饰的标识符.它是由双引号(")包围的一个任意字符序列.一个受限标识符总是一个标识符而不会是一个关键字.因此"select"可以用于引用 ...