`

oracle临时表

阅读更多
drop table Student

create global temporary table Student

(Stu_id Number(5),

Class_id  Number(5),

Stu_Name Varchar2(8),

Stu_Memo varchar2(200))On Commit Delete Rows;

--On Commit Preserve Rows;

begin

       testTempTabel();
end;

 

http://blog.csdn.net/wyzxg/archive/2007/11/13/1882347.aspx

 

前段时间,新公司的面试官问了一个问题,临时表的作用,以前我们用缓存中间数据时候,都是自己建一个临时表。其实oracle本身在这方面就已经考虑很全了,除非有些高级应用,我再考虑自己创建临时表。由于本人对临时表的了解不是很多,于是回来搜集下这方面的资料,弥补下这块的不足。

1、前言

 

    目前所有使用Oracle作为数据库支撑平台的应用,大部分数据量比较庞大的系统,即表的数据量一般情况下都是在百万级以上的数据量。

 

    当然在Oracle中创建分区是一种不错的选择,但是当你发现你的应用有多张表关联的时候,并且这些表大部分都是比较庞大,而你关联的时候发现其中的某一张或者某几张表关联之后得到的结果集非常小并且查询得到这个结果集的速度非常快,那么这个时候我考虑在Oracle中创建“临时表”。

 

 我对临时表的理解:在Oracle中创建一张表,这个表不用于其他的什么功能,主要用于自己的软件系统一些特有功能才用的,而当你用完之后表中的数据就没用了。Oracle的临时表创建之后基本不占用表空间,如果你没有指定临时表(包括临时表的索引)存放的表空的时候,你插入到临时表的数据是存放在ORACLE系统的临时表空间中(TEMP)。

 

 

2、临时表的创建

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

会话级的临时表

事务级的临时表。

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

Create Global Temporary Table Table_Name

(Col1 Type1,Col2 Type2...) On Commit Preserve Rows;

举例:

create global temporary table Student

(Stu_id Number(5),

Class_id  Number(5),

Stu_Name Varchar2(8),

Stu_Memo varchar2(200)) on Commit Preserve Rows ;

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

Create Global Temporary Table Table_Name

(Col1 Type1,Col2 Type2...) On Commit Delete Rows;

举例:

create global temporary table Classes

(Class_id Number(5),

Class_Name Varchar2(8),

Class_Memo varchar2(200)) on Commit delete Rows ;

3)  两中类型临时表的区别

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

 

4)什么时候使用临时表

 

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

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

 

 

3.例子:略

4.临时表的不足之处

 

    1)不支持lob对象,这也许是设计者基于运行效率的考虑,但实际应用中确实需要此功能时就无法使用临时表了。

2)不支持主外键关系

 

所以,由于以上原因,我们可以自己创建临时表,以弥补oracle临时表的不足之处

 

上面的都是本人经过测试的,但下面是在网上搜索到的方法,本人具体没有测试过,不过觉得可行性很强,有时间测试下

 

   创建方法:

      1、以常规表的形式创建临时数据表的表结构,但要在每一个表的主键中加入一个 SessionID <NUMBER> 列以区分不同的会话。(可以有lob列和主外键)

2、写一个用户注销触发器,在用户结束会话的时候删除本次会话所插入的所有记录(SessionID等于本次会话ID的记录)。

3、程序写入数据时,要顺便将当前的会话ID(SessionID)写入表中。

4、程序读取数据时,只读取与当前会话ID相同的记录即可。

   功能增强的扩展设计:
  1、可以在数据表上建立一个视图,视图对记录的筛选条件就是当前会话的SessionID。
  2、数据表中的SessionID列可以通过Trigger实现,以实现对应用层的透明性。
  3、高级用户可以访问全局数据,以实现更加复杂的功能。

  扩展临时表的优点:
  1、实现了与Oracle的基于会话的临时表相同的功能。
  2、支持SDO_GEOMETRY等lob数据类型。
  3、支持表间的主外键连接,且主外键连接也是基于会话的。
  4、高级用户可以访问全局数据,以实现更加复杂的功能


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wyzxg/archive/2007/11/13/1882347.aspx

分享到:
评论

相关推荐

    Oracle临时表空间满的解决步骤

    解决 Oracle 临时表空间满的问题需要通过查看当前数据库的默认临时表空间、查看当前临时表空间的大小、创建新的临时表空间、将新建的临时表空间设置为数据库的默认临时表空间、删除原来的临时表空间、创建新的临时表...

    Oracle临时表空间不足和批处理缓慢问题探讨.pdf

    Oracle 临时表空间不足和批处理缓慢问题探讨 本文探讨了 Oracle 临时表空间不足和批处理缓慢问题的原因和解决方法。通过分析和测试,发现了问题的根源在于应用逻辑方面,具体来说是 SQL 语句的编写问题。通过编写...

    Oracle 临时表用法

    本文将详细介绍Oracle临时表的创建方法、使用场景以及优缺点,帮助读者更好地理解和运用这一特性。 #### 二、Oracle临时表概述 Oracle临时表是一种特殊的表,用于存储临时数据,通常用于事务处理或特定会话期间的...

    Oracle临时表

    ### Oracle临时表详解 #### 一、Oracle临时表概述 在Oracle数据库中,临时表是一种特殊类型的数据表,主要用于存储暂时性的数据。与永久表不同的是,临时表中的数据不会一直保留,而是根据不同的条件(如事务结束...

    oracle临时表用法

    Oracle 临时表用法 Oracle 临时表是一种特殊的表结构,它可以在数据库中临时存储数据,用于实现一些特定的应用场景。下面是 Oracle 临时表的详细知识点: 创建临时表 创建临时表的语法为: ``` CREATE GLOBAL ...

    oracle临时表(事务级、会话级).docx

    "Oracle 临时表(事务级、会话级)" Oracle 临时表是 Oracle 数据库中的一种特殊类型的表,它可以保存一个会话或事务中的数据。当会话或事务结束时,临时表中的数据自动清空,但是临时表的结构和元数据还存储在...

    Oracle 临时表空间使用注意

    Oracle 临时表空间是Oracle...总之,理解并正确使用Oracle临时表空间是确保数据库高效运行的关键。通过对临时表空间的合理配置和管理,可以有效地提升数据库的响应速度,降低系统资源消耗,从而优化整体的数据库性能。

    Oracle 临时表之临时表的应用问题

     临时表本质上是一种cache的表现形式,Oracle的临时表都是事先建好的,一旦用了临时表,存放的是和本会话相关的数据,没有人会傻乎乎地用临时表来保存本应该共享的数据。  with子查询实际上也是用了临时表,...

    Oracle 临时表用法汇总

    临时表的应用 1)、当某一个SQL语句关联的表在2张及以上,并且和一些小表关联。可以采用将大表进行分拆并且得到比较小的结果集合存放在临时表中。 2)、程序执行过程中可能需要存放一些临时的数据,这些数据在整个...

    Oracle释放临时表空间脚本

    ### Oracle 临时表空间管理与释放脚本解析 在Oracle数据库管理中,临时表空间(Temporary Tablespace)的管理是一项非常重要的任务。合理的管理和优化临时表空间不仅可以提高系统的性能,还可以帮助解决空间不足等...

    ORACLE中临时表

    Oracle中的临时表是一种特殊的数据结构,用于存储会话或事务期间的数据,这些数据仅对当前会话可见,并在特定条件下自动清除。Oracle提供两种类型的临时表:事务型和会话型。 事务型临时表在事务开始时创建,插入的...

    Oracle临时表空间处理.txt

    ### Oracle 临时表空间管理详解 #### 一、概述 Oracle 数据库中的临时表空间主要用于存储临时对象,如排序操作、表连接等过程中产生的临时数据。这些数据在事务结束后会被自动清除,不会占用永久存储空间。正确管理...

    OracleTemporaryTables(Oracle临时表).docx

    Oracle Temporary Tables,也称为Oracle临时表,是Oracle数据库系统中用于存储临时数据的特殊类型表。它们主要用于处理会话级别的数据,这些数据在特定会话或事务结束后会被自动清理,从而减少了对永久表的负担和...

    oracle自增长与临时表

    **二、Oracle临时表** 临时表在Oracle中用于在单个会话中存储临时数据,这些数据只对创建它们的会话可见,会话结束时,临时表及其数据都会被自动删除。 1. **创建临时表**:使用`CREATE GLOBAL TEMPORARY TABLE`...

    OracleTemporaryTables(Oracle临时表).pdf

    Oracle Temporary Tables,也称为Oracle临时表,是在Oracle数据库中用于临时存储数据的特殊表。它们主要用在处理大型数据集时提高性能,特别是在复杂的查询和存储过程中。临时表的生命周期和可见性根据创建时指定的...

    oracle 临时表使用例子并用CURSOR返回结果集的例子

    本篇文章将深入探讨Oracle临时表的使用,并通过一个使用游标(CURSOR)返回结果集的例子来进一步理解其用法。 首先,让我们了解如何创建Oracle临时表。临时表的创建语法与普通表类似,但我们需要使用`GLOBAL ...

    oracle临时表操作学习资料

    Oracle数据库中的临时表是一种特殊的表类型,主要用于存储在特定会话或事务期间产生的临时数据。与常规的永久表相比,临时表的数据不会永久保存,而是会在会话结束或事务完成时自动清除,无需用户手动删除。 1. **...

    一个开发需求的解决方案Oracle临时表介绍.docx

    创建Oracle临时表的语法是`CREATE GLOBAL TEMPORARY TABLE`,并且可以指定`ON COMMIT`子句来决定数据何时清除,交易级别(Transaction)或会话级别(Session)。交易级别意味着在每次提交时清空表,而会话级别则是在...

    oracle查找定位占用临时表空间较大的SQL语句方法

    oracle查找定位占用临时表空间较大的SQL语句方法,包括:(1)造成临时表空间暴涨的SQL还在运行中(2)造成临时表空间暴涨的SQL已经运行过了。

Global site tag (gtag.js) - Google Analytics