- 浏览: 788718 次
- 性别:
- 来自: 广州
文章分类
最新评论
ORACLE临时表—ON COMMIT PRESERVE ROWS
- 博客分类:
- oracle
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只创建了表的结构(在数据字典中定义),并没有初始化内存空间,当某一会话使用临时表时,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 10g 的clusterware 32位 下载地址
2013-04-19 23:03 1238Oracle 10g 的clusterware 32位 下载地 ... -
oracle 分析函数 RANK()
2013-04-11 00:05 1108RANK()既是一个聚合函数,也是一个分析函数 其具体的语法 ... -
oracle 分析函数
2013-04-09 23:25 1185分析函数是用于计算一组中多行的聚合值,与聚合函数的区别在于聚合 ... -
批量执行 bulk collect与forall用法
2013-04-08 23:49 1400BULK COLLECT 子句会批量检 ... -
pl/sql集合类型
2013-03-26 10:12 1578--集合类型 /* 单行单列的数据,使用标量变量 单行 ... -
oracle 行链接与行迁移
2013-03-16 01:06 1113表里的一行对于一个数据块太大的情况有二种(一行在一个数据块里放 ... -
oracle Health Monitor
2013-01-20 00:02 1620About Health Monitor Beginning ... -
oracle moving window size与 AWR retention period关系
2013-01-19 15:58 8495转自: http://tomszrp.itpub.net/po ... -
Oracle11.2新特性之INSERT提示IGNORE_ROW_ON_DUPKEY_INDEX
2013-01-12 00:20 2932insert提示IGNORE_ROW_ON_DUPKEY_IN ... -
oracle 11g新特性Flashback data archive
2013-01-09 22:52 30891. 什么是flashback data archive F ... -
RMAN List和report 命令
2012-12-25 00:07 2915LIST 命令 使用RMAN LIST 命令显示有关资料档案库 ... -
oracle ASM中ASM_POWER_LIMIT参数
2012-12-24 23:46 6445ASM_POWER_LIMIT 该初始化参数用于指定ASM例程 ... -
oracle I/O 从属进程
2012-12-24 23:24 1440I/O 从属进程 I/O从 ... -
easy connect 之 ORA-12154: TNS: 无法解析指定的连接标识符
2012-12-19 23:43 5647用easy connect连接出现“tns无法解析指定的连接标 ... -
Flashback Database --闪回数据库
2012-12-19 23:38 1398Flashback 技术是以Undo segment中的内容为 ... -
Oracle 11g新特性:Automatic Diagnostic Repository
2012-12-19 22:35 1399Oracle Database 11g的FDI(Fault D ... -
RMAN配置中通道(CHANNEL)相关参数 PARALLELISM 、FILESPERSET的关系
2012-12-19 22:09 2729RMAN配置中通道(CHANNEL)相 ... -
oracle 空间RESUMABLE
2012-12-14 22:05 3067空间RESUMABLE操作 转 Oracle从9i开始 ... -
oracle 创建视图 with check option
2012-12-13 23:14 1539我们来看下面的例子: create or replace vi ... -
flashback transaction闪回事务查询
2012-11-26 22:00 1508闪回事务查询有别于闪回查询的特点有以下3个: (1) ...
相关推荐
### Oracle 临时表用法详解 #### 一、背景与问题描述 在处理数据库操作时,经常遇到因数据量庞大而导致处理效率降低的问题。例如,某个报表中心的存储过程执行速度过慢,其中一个原因是该过程涉及到一个中间表,...
`ON COMMIT PRESERVE ROWS` 子句指定了该临时表在事务提交时保留数据。 结论 Oracle 临时表是一种非常有用的工具,可以帮助我们实现一些特定的应用场景。但是,使用临时表时需要注意一些问题,例如避免在存储过程...
与事务临时表不同,这里使用了`ON COMMIT PRESERVE ROWS`来指定即使事务提交后,数据仍保留在表中。 - **特点**: - 数据在会话结束后才会被清除。 - 即使事务结束,数据仍保留在表中,直到会话结束。 - 同样地...
这种类型的临时表可以使用 ON COMMIT PRESERVE ROWS 说明,表示临时表是会话指定,当中断会话时(commit or rollback),Oracle 自动清除临时表中数据。 临时表的特点 1. 临时表的数据只对当前 Session 有效,每个...
Oracle中的临时表是一种特殊的数据结构,用于存储会话或事务期间的数据,这些数据仅对当前会话可见,并在特定条件下自动清除。Oracle提供两种类型的临时表:事务型和会话型。 事务型临时表在事务开始时创建,插入的...
创建事务级临时表的语法与会话级类似,只需将`ON COMMIT DELETE ROWS`替换为`ON COMMIT PRESERVE ROWS`,如下所示: ```sql CREATE GLOBAL TEMPORARY TABLE temp_table ( column1 datatype, column2 datatype, .....
- **创建**:创建会话临时表的命令类似,但需使用`ON COMMIT PRESERVE ROWS`关键字,如`CREATE GLOBAL TEMPORARY TABLE TEMP_USER (ID NUMBER(12) PRIMARY KEY, name VARCHAR2(10)) ON COMMIT PRESERVE ROWS`。...
- **On Commit Delete Rows**:当事务提交后,临时表中的数据会被自动清除。这种方式适合于不需要保存中间结果的情况。 ```sql create global temporary table Classes ( Class_id Number(5), Class_Name ...
Oracle Temporary Tables,也称为Oracle临时表,是Oracle数据库系统中用于存储临时数据的特殊类型表。它们主要用于处理会话级别的数据,这些数据在特定会话或事务结束后会被自动清理,从而减少了对永久表的负担和...
全局临时表有两种主要的行为模式:`ON COMMIT PRESERVE ROWS` 和 `ON COMMIT DELETE ROWS`。 ##### 1. `ON COMMIT PRESERVE ROWS` 这种方式下,当提交事务后,表中的数据会被保留下来,直到会话结束时才被删除。...
其中`ON COMMIT DELETE ROWS`表示在事务提交后删除临时表中的所有行,另一种选项是`ON COMMIT PRESERVE ROWS`,意味着在事务提交后保留数据,但仅对当前会话可见。 2. **插入数据** 插入数据到临时表的方法与普通...
### Oracle特性临时表详解 #### 一、临时表概述 在Oracle数据库中,临时表是一种特殊类型的表,它主要用于存储那些仅对当前会话或事务有意义的数据。与普通表不同的是,临时表的数据不会持久化存储,而是根据特定...
如果希望在会话结束时保留临时表的数据,可以使用`ON COMMIT PRESERVE ROWS`替代。 4. **性能优化**:临时表对于需要大量中间结果的复杂查询和临时数据处理非常有用,特别是在进行数据分析和报表生成时,可以减少对...
Oracle中的临时表是一种特殊的数据表,用于存储在特定会话或事务期间产生的临时数据。它们在数据库中存在,但其生命周期受到严格的限制,以确保数据的隔离性和安全性。临时表主要分为两类:事务级别的临时表和会话...
这里,`ON COMMIT DELETE ROWS`选项表示当事务提交时,临时表中的所有行都将被删除,这是临时表最常见的清理策略。另一种策略是`ON COMMIT PRESERVE ROWS`,它允许在事务之间保留数据,但通常不推荐,因为可能导致...
- **ON COMMIT PRESERVE ROWS**:会话级的临时表,其数据在当前会话结束时(无论是正常退出、异常退出还是Oracle实例崩溃)才会被删除。同样,其他会话的数据不受影响。 2. **特点**: - **元数据保留**:即使...
Oracle的临时表是一种特殊的数据存储结构,主要用于处理一次性或短暂性的数据需求,尤其在处理大量数据和复杂查询时,能够显著提升性能。临时表在Oracle中有两种类型:会话级临时表和事务级临时表。 1. **会话级...
`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...
会话特有的临时表通过`ON COMMIT PRESERVE ROWS`语句创建。这种类型的临时表在会话期间保持其数据,即使事务提交,数据仍然保留,直到会话结束。这意味着,不同的会话无法看到彼此在会话临时表中插入的数据,确保了...