`

ORACLE临时表—ON COMMIT PRESERVE ROWS

阅读更多
ORACLE临时表 转
临时表:像普通表一样,有结构,但是对数据的管理上不一样,临时表存储事务或会话的中间结果集,临时表中保存的数据只对当前
会话可见,所有会话都看不到其他会话的数据,即使其他会话提交了,也看不到。临时表不存在并发行为,因为他们对于当前会话都是独立的。
创建临时表时,ORACLE只创建了表的结构(在数据字典中定义),并没有初始化内存空间,当某一会话使用临时表时,ORALCE会从当前用户的
临时表空间分配一块内存空间。也就是说只有向临时表中插入数据时,才会给临时表分配存储空间。
临时表分事务级临时表和会话级临时表。
事务级临时表只对当前事务有效,通过语句:ON COMMIT DELETE ROWS 语句指定。
会话级临时表对当前会话有效,通过语句:ON COMMIT PRESERVE ROWS语句指定。

用法举例(在SCOTT模式下):
CREATE GLOBAL TEMPORARY TABLE session_temp_tab ON COMMIT PRESERVE ROWS AS SELECT * FROM emp WHERE 1=2;
ON COMMIT PRESERVE ROWS语句指定所创建的临时表是会话级临时表,当我们断开连接或手动执行DELETE或TRUNCATE之前,临时表中的数据一直存
在,并且只有当前会话可以看到,其他会话看不到。
CREATE GLOBAL TEMPORARY TABLE transaction_temp_tab ON COMMIT DELETE ROWS AS SELECT * FROM emp WHERE 1=2;
ON COMMIT DELETE ROWS语句指定所创建的临时表是事务级临时表,当COMMIT或ROLLBACK之前,这些数据一直存在,当事务提交之后,表中数据自
动清除。
insert into session_temp_tab select * from emp ;
insert into transaction_temp_tab select * from emp ;
SQL> select count(*) from session_temp_tab ;

COUNT(*)
----------
        14

SQL> select count(*) from transaction_temp_tab ;

COUNT(*)
----------
        14
SQL> commit;

Commit complete

SQL> select count(*) from session_temp_tab ;

COUNT(*)
----------
        14

SQL> select count(*) from transaction_temp_tab ;

COUNT(*)
----------
         0

当COMMIT之后事务级临时表中的数据自动清除,所以再次查询的时候得到结果为0 ;
SQL> disconnect ;
Not logged on

SQL> connect scott/tiger ;
Connected to Oracle Database 11g Enterprise Edition Release 11.1.0.6.0
Connected as scott

SQL> select count(*) from transaction_temp_tab ;

COUNT(*)
----------
         0

SQL> select count(*) from session_temp_tab ;

COUNT(*)
----------
         0
当断开之后重新连接之后,会话级临时表中的数据也被自动删除了。
分享到:
评论

相关推荐

    Oracle 临时表用法

    ### Oracle 临时表用法详解 #### 一、背景与问题描述 在处理数据库操作时,经常遇到因数据量庞大而导致处理效率降低的问题。例如,某个报表中心的存储过程执行速度过慢,其中一个原因是该过程涉及到一个中间表,...

    oracle临时表用法

    `ON COMMIT PRESERVE ROWS` 子句指定了该临时表在事务提交时保留数据。 结论 Oracle 临时表是一种非常有用的工具,可以帮助我们实现一些特定的应用场景。但是,使用临时表时需要注意一些问题,例如避免在存储过程...

    Oracle临时表

    与事务临时表不同,这里使用了`ON COMMIT PRESERVE ROWS`来指定即使事务提交后,数据仍保留在表中。 - **特点**: - 数据在会话结束后才会被清除。 - 即使事务结束,数据仍保留在表中,直到会话结束。 - 同样地...

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

    这种类型的临时表可以使用 ON COMMIT PRESERVE ROWS 说明,表示临时表是会话指定,当中断会话时(commit or rollback),Oracle 自动清除临时表中数据。 临时表的特点 1. 临时表的数据只对当前 Session 有效,每个...

    ORACLE中临时表

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

    Oracle存储过程中使用临时表

    创建事务级临时表的语法与会话级类似,只需将`ON COMMIT DELETE ROWS`替换为`ON COMMIT PRESERVE ROWS`,如下所示: ```sql CREATE GLOBAL TEMPORARY TABLE temp_table ( column1 datatype, column2 datatype, .....

    oracle临时表操作学习资料

    - **创建**:创建会话临时表的命令类似,但需使用`ON COMMIT PRESERVE ROWS`关键字,如`CREATE GLOBAL TEMPORARY TABLE TEMP_USER (ID NUMBER(12) PRIMARY KEY, name VARCHAR2(10)) ON COMMIT PRESERVE ROWS`。...

    Oracle优化, 优化查询速度,目前所有使用Oracle作为数据库支撑平台的应用

    - **On Commit Delete Rows**:当事务提交后,临时表中的数据会被自动清除。这种方式适合于不需要保存中间结果的情况。 ```sql create global temporary table Classes ( Class_id Number(5), Class_Name ...

    OracleTemporaryTables(Oracle临时表).docx

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

    Oracle中临时表的创建

    全局临时表有两种主要的行为模式:`ON COMMIT PRESERVE ROWS` 和 `ON COMMIT DELETE ROWS`。 ##### 1. `ON COMMIT PRESERVE ROWS` 这种方式下,当提交事务后,表中的数据会被保留下来,直到会话结束时才被删除。...

    oracle临时表

    其中`ON COMMIT DELETE ROWS`表示在事务提交后删除临时表中的所有行,另一种选项是`ON COMMIT PRESERVE ROWS`,意味着在事务提交后保留数据,但仅对当前会话可见。 2. **插入数据** 插入数据到临时表的方法与普通...

    Oracle特性临时表

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

    oracle自增长与临时表

    如果希望在会话结束时保留临时表的数据,可以使用`ON COMMIT PRESERVE ROWS`替代。 4. **性能优化**:临时表对于需要大量中间结果的复杂查询和临时数据处理非常有用,特别是在进行数据分析和报表生成时,可以减少对...

    Oracle中的临时表讲解

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

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

    这里,`ON COMMIT DELETE ROWS`选项表示当事务提交时,临时表中的所有行都将被删除,这是临时表最常见的清理策略。另一种策略是`ON COMMIT PRESERVE ROWS`,它允许在事务之间保留数据,但通常不推荐,因为可能导致...

    OracleTemporaryTables(Oracle临时表).pdf

    - **ON COMMIT PRESERVE ROWS**:会话级的临时表,其数据在当前会话结束时(无论是正常退出、异常退出还是Oracle实例崩溃)才会被删除。同样,其他会话的数据不受影响。 2. **特点**: - **元数据保留**:即使...

    Oracle_临时表介绍

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

    Oracel储存过程用临时表

    `ON COMMIT PRESERVE ROWS` 选项确保了即使在事务提交后,临时表中的数据仍保留,直到会话结束。另外,还可以选择 `ON COMMIT DELETE ROWS`,这样在事务提交时,所有行都将被删除。 在存储过程中使用临时表,我们...

    简单理解数据库临时表

    以Oracle数据库为例,我们可以使用以下SQL语句来创建一个简单的临时表: ```sql CREATE GLOBAL TEMPORARY TABLE TableName ( FieldA VARCHAR2(20), FieldB NUMBER(10) ) ON COMMIT PRESERVE ROWS; ``` - `CREATE...

    oracle 临时表详解及实例

    会话特有的临时表通过`ON COMMIT PRESERVE ROWS`语句创建。这种类型的临时表在会话期间保持其数据,即使事务提交,数据仍然保留,直到会话结束。这意味着,不同的会话无法看到彼此在会话临时表中插入的数据,确保了...

Global site tag (gtag.js) - Google Analytics