Oracle 临时表

时间:2022-09-19 15:43:25

一、临时表的介绍:

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. POJ 3416 Crossing --离线+树状数组

    题意: 给一些平面上的点,然后给一些查询(x,y),即以(x,y)为原点建立坐标系,一个人拿走第I,III象限的点,另一个人拿II,IV象限的,点不会在任何一个查询的坐标轴上,问每次两人的点数差为多少 ...

  2. 夺命雷公狗mongodb之----mongodb---2---常用命令和技巧

    查看有那些数据库: show dbs 切换到那个库: use  库名 use local use还有一个作用就是可以“创建一个数据库” use test 删除数据库: db.dropDatabase( ...

  3. UVA 10780 Again Prime? No Time. 分解质因子

    The problem statement is very easy. Given a number n you have to determine the largest power of m,no ...

  4. DataSet用法详细

    转自:http://www.cnblogs.com/zeroone/archive/2012/06/08/2541299.html DataSet用法详细 一.特点介绍 1.处理脱机数据,在多层应用程 ...

  5. iframe实现局部刷新和回调(转)

    今天做项目遇到一个问题.就是提交表单的时候,要在后台验证用户名是否存在和验证码是否正确. 当验证码或者用户名存在的时候.在后台弹窗提示.可页面原本file里面符合要求的值刷新没了.用户体验不好.因为用 ...

  6. HashMap原理浅析

    HashMap概述 HashMap是基于哈希表和Map实现来的,它提供所有可选的映射方式,可以允许使用null键,除了不同步和允许使用null键之外,HashMap和HashTable基本上相同.因此 ...

  7. Win10+Ubuntu18.04双系统安装

    Win10+Ubuntu18.04 亲测UEFI启动模式双硬盘+双系统成功安装经验 https://blog.csdn.net/xrinosvip/article/details/80428133 分 ...

  8. DHCP服务器的搭建

    dhcp笔记整理:http://services.linuxpanda.tech/DHCP/index.html 1 dhcp简介 DHCP原理 动态主机配置协议(Dynamic Host Confi ...

  9. BZOJ5306 HAOI2018染色(容斥原理+NTT)

    容易想到枚举恰好出现S次的颜色有几种.如果固定至少有i种恰好出现S次,那么方案数是C(M,i)·C(N,i*S)·(M-i)N-i*S·(i*S)!/(S!)i,设为f(i). 于是考虑容斥,可得恰好 ...

  10. centos 7 源代码安装mysql5.6

    ###### mysql ######### 引言:这里选用mysql5.6版本,5.7版本编译时间需要几个小时. 编译安装环境: yum -y install make gcc-c++ cmake ...