创建临时表时,ORACLE只创建了表的结构(在数据字典中定义),并没有初始化内存空间,当某一会话使用临时表时,ORALCE会从当前用户的临时表空间分配一块内存空间。
也就是说只有向临时表中插入数据时,才会给临时表分配存储空间。
临时表分事务级临时表和会话级临时表
1、事务级临时表只对当前事务有效,通过语句:ON COMMIT DELETE ROWS 语句指定。
CREATE GLOBAL TEMPORARY TABLE report_work_area
(
startdate DATE,
enddate DATE,
(
startdate DATE,
enddate DATE,
class CHAR(20)
) ON COMMIT DELETE ROWS;
) ON COMMIT DELETE ROWS;
COMMIT或ROLLBACK之前,数据一直存在,当事务提交之后,表中数据自动清除。
2、会话级临时表对当前会话有效,通过语句:ON COMMIT PRESERVE ROWS语句指定。
CREATE GLOBAL TEMPORARY TABLE report_work_area
(
startdate DATE,
enddate DATE,
(
startdate DATE,
enddate DATE,
class CHAR(20)
) ON COMMIT PRESERVE ROWS;
) ON COMMIT PRESERVE ROWS;
当我们断开连接或手动执行DELETE或TRUNCATE之前,临时表中的数据一直存在,并且只有当前会话可以看到,其他会话看不到。当断开会话后,表中数据自动清除。