临时表学习

temporary tables定义

临时表中的数据只对当前Session有效,每个Session都有自己的临时数据,并且不能访问其它Session的临时表中的数据。因此,临时表不需要DML锁;

DML操作的临时表不产生redo log重作日志,但会产生回滚日志Undo log;Undo的产生(rollback segment)会产生Redo log;

支持索引创建(创建索引时不能另指定表空间,同时临时表中有数据时不能创建索引);

支持指定表空间创建临时表;

只有在没有会话使用该临时表时才支持各类DDL语句,当然TRUNCATE例外,因为TRUNCATE也只是清除当前会话数据;

类别

1. 会话级临时表

当用户退出会话结束的时候,Oracle自动清除临时表中数据。

保存一个会话SESSION的数据

PRESERVE ROWS

2. 事务级临时表

当一个事务结束(commit or rollback),Oracle自动清除临时表中数据.
保存在一个事务中需要的数据

DELETE ROWS

默认(未指定事务级/会话级)创建的临时表为事务级临时表;

创建语法

--会话级

create global temporary table g_tmp3(id int) on commit preserve rows;

--事务级

create global temporary table g_tmp2(id int) on commit delete rows;

原文地址:https://www.cnblogs.com/bowshy/p/3550912.html