`

Oracle临时表生命周期

 
阅读更多

Oracle临时表介绍
目前所有使用Oracle作为数据库支撑平台的应用,大部分数据量比较庞大的系统,即表的数据量一般情况下都是在百万级以上的数据量。当然在Oracle中创建分区是一种不错的选择,但是当你发现你的应用有多张表关联的时候,并且这些表大部分都是比较庞大,而你关联的时候发现其中的某一张或者某几张表关联之后得到的结果集非常小并且查询得到这个结果集的速度非常快,那么这个时候我考虑在Oracle中创建“临时表”。
在Oracle中创建一张表,这个表不用于其他的什么功能,主要用于自己的软件系统一些特有功能才用的,而当你用完之后表中的数据就没用了。Oracle的临时表创建之后基本不占用表空间,如果你没有指定临时表(包括临时表的索引)存放的表空的时候,你插入到临时表的数据是存放在ORACLE系统的临时表空间中

ORACLE的临时表在应用系统中有很大的作用,它可以让用户只能够操作各自的数据中而互不干扰,不用担心会破坏或影响其他SESSION/TRANSACTION的数据,这也是数据安全的一种解决方法 
临时表分为SESSION、TRANSACTION两种,SESSION级的临时表数据在整个SESSION都存在,直到结束此次SESSION;而TRANSACTION级的临时表数据在TRANACTION结束后消失,即COMMIT/ROLLBACK或结束SESSION都会清除TRANACTION临时表数据。



两种临时表的语法
create global temporary table 临时表名 on commit preserve|delete rows 
用preserve时就是SESSION级的临时表,用delete就是TRANSACTION级的临时表

CREATE GLOBAL TEMPORARY TABLE GT_ONE ( 
SN NUMBER, 
QTY NUMBER 
) ON COMMIT DELETE ROWS; 

“ON COMMIT DELETE ROWS ” 意思是提交当前事务时删除临时表中的数据。 

CREATE GLOBAL TEMPORARY TABLE GT_ONE ( 
SN NUMBER, 
QTY NUMBER 
) ON COMMIT PRESERVE ROWS; 

“ON COMMIT DELETE ROWS ” 意思是提交当前事务时不删除临时表中的数据。 

不论哪种形式,结束会话时都会删除临时表中的数据,在不同的会话中互不影响。


SESSION级临时表

--建立临时表 

create global temporary table temp_tbl(col_a varchar2(30)) 
on commit preserve rows 

--插入数据 

insert into temp_tbl values('test session table') 

--提交 
commit 

--查询数据 

select *from temp_tbl 

可以看到数据'test session table'记录还在 

--结束SESSION,重新登录,再查询数据select *from temp_tbl,这时候记录已不存在,因为系统在结束SESSION时自动清除记录 


TRANSACTION级临时表

--建立临时表 

create global temporary table temp_tbl(col_a varchar2(30)) 
on commit delete rows 

--插入数据 

insert into temp_tbl values('test transaction table') 

--提交 
commit 
--查询数据 

select *from temp_tbl 

这时候可以看到刚才插入的记录'test transaction table'已不存在了;同样,如果不提交而直接结束SESSION,重新登录记录也不存在。



已存在的表插入到临时表

create table SSS
(
ID NUMBER,
VALUE1 NUMBER
)

insert into sss values(1,2);

CREATE OR REPLACE PROCEDURE BBBB(PO_RESULT OUT SYS_REFCURSOR) IS
BEGIN
execute immediate 'CREATE GLOBAL TEMPORARY TABLE AAA (NUM VARCHAR2(10),QTY INTEGER) ON COMMIT DELETE ROWS ';

execute immediate 'insert into AAA SELECT * FROM sss';

OPEN PO_RESULT FOR 'select * from AAA';
END BBBB;


临时表的应用

1、	当某一个SQL语句关联的表在2张及以上,并且和一些小表关联。可以采用将大表进行分拆并且得到比较小的结果集合存放在临时表中。
2、	程序执行过程中可能需要存放一些临时的数据,这些数据在整个程序的会话过程中都需要用的等等。
3、	临时表的索引以及对表的修改、删除等和正常的表是一致的。

 

分享到:
评论

相关推荐

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

    会话级临时表是指临时表中的数据只在会话生命周期中存在,当用户退出会话结束的时候,Oracle 自动清除临时表中数据。这种类型的临时表可以使用 ON COMMIT DELETE ROWS 说明,表示每次提交后 Oracle 将截断表(删除...

    ORACLE中临时表

    Oracle中的临时表是一种特殊的数据结构,用于存储会话或事务期间的数据,这些数据仅对当前会话可见,并在特定条件下...在使用临时表时,应考虑其生命周期、数据隔离性和性能影响,确保符合应用程序的需求和性能优化。

    Oracle临时表

    根据数据的生命周期,Oracle临时表可以分为两大类:事务临时表和会话临时表。 ##### 1. 事务临时表 - **定义**:事务临时表中的数据仅在当前事务的生命周期内有效。一旦事务结束(通过提交或回滚),表中的所有...

    Oracle存储过程中使用临时表

    事务级临时表(Transaction-Level Temporary Tables)的生命周期与会话级不同,它们仅在创建的事务内存在。当事务提交或回滚时,这些临时表的数据也会随之消失。创建事务级临时表的语法与会话级类似,只需将`ON ...

    oracle自增长与临时表

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

    oracle临时表

    Oracle临时表是数据库管理系统中的一种特殊表,它主要用于在会话期间存储临时数据,供当前会话使用。这种表在会话结束时会被自动删除,不会永久保存在数据库中,因此,它们对于处理大量中间结果或者进行复杂计算的...

    oracle临时表操作学习资料

    - **安全性**:由于临时表的数据生命周期短暂,它们可以用于执行需要保密的操作,例如中间计算或敏感数据处理,因为这些数据在完成后会被自动清除。 - **性能优化**:临时表在某些复杂查询和多步处理中可以提高...

    Oracle中临时表的创建

    #### 二、Oracle临时表概述 临时表是Oracle提供的一种特殊类型的表,用于存储临时数据。它们通常用于执行复杂的计算任务或暂存中间结果,以减少对主表的访问次数,从而提升整体性能。根据生命周期的不同,临时表...

    OracleTemporaryTables(Oracle临时表).docx

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

    Oracle特性临时表

    ### Oracle特性临时表详解 #### 一、临时表概述 在Oracle数据库中,临时表是一种特殊类型的表,它主要用于存储那些仅对当前会话或事务有意义的数据。与普通表不同的是,临时表的数据不会持久化存储,而是根据特定...

    OracleTemporaryTables(Oracle临时表).pdf

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

    对比Oracle临时表和SQL Server临时表的不同点

    - **数据隔离**:Oracle临时表的数据隔离更严格,不允许跨会话访问,而SQL Server的全局临时表允许跨会话访问,但生命周期控制保证了安全性。 - **索引和视图**:两者都可以创建,但Oracle的临时索引和视图只对...

    SQL Server中关于临时表概念及创建和插入数据等问题

    SQL Server 中的临时表概念、创建和插入数据等问题 SQL Server 中的临时表...SQL Server 中的临时表概念和创建、插入数据等问题需要注意临时表的生命周期、连接的状态、事务的提交情况等因素,以避免数据丢失和错误。

    Oracle中的临时表讲解

    Oracle中的临时表是一种特殊的数据表,用于存储在特定会话或事务期间产生的临时数据。它们在数据库中存在,但其生命周期受到严格的限制,以确保数据的隔离性和安全性。临时表主要分为两类:事务级别的临时表和会话...

    oracle,sql临时表.pdf

    对于事务级临时表,数据仅存在于事务生命周期内;对于会话级临时表,数据则在会话期间保持。当会话结束或事务结束时,Oracle会执行TRUNCATE操作,清空该会话的临时表数据,但不会影响其他会话的数据。 3. **日志...

    Oracle_临时表介绍

    Oracle的临时表是一种特殊的数据存储结构,主要用于处理一次性或短暂性的数据需求,尤其在处理大量数据和复杂查询时,能够显著提升性能。临时表在Oracle中有两种类型:会话级临时表和事务级临时表。 1. **会话级...

    oracle,sql临时表.docx

    对于事务特定的临时表,数据在事务生命周期内有效;而对于会话特定的临时表,数据在会话期间有效。当会话结束或事务结束时,Oracle执行`TRUNCATE`语句清除该会话的临时表数据,但这不会影响其他正在使用相同表的会话...

    Oracel储存过程用临时表

    临时表是数据库中的特殊表格,它的生命周期只存在于会话(Session)内,一旦会话结束,临时表及其数据都会被自动删除。这使得它们非常适合用于存储过程中的临时数据存储,不会对其他用户或会话产生影响。 创建临时...

    简单理解数据库临时表

    1. **生命周期短暂**:临时表的生命周期往往与某个会话或事务关联,一旦该会话结束或事务提交/回滚后,临时表就会自动消失。 2. **安全性高**:由于临时表只存在于当前用户的会话中,因此其他用户无法访问这些表中的...

Global site tag (gtag.js) - Google Analytics