临时表学习
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;