临时表
在oracle8i以前已经有大量的应用程序使用临时表存储处理过程中结构复杂的数据,这些表以数据库表或者PL/SQL表的形式出现。从oracle8i开始,临时表的维护和管理由服务器负责。
创建临时表
可以通过create global temporary语句创建临时表,根据ON COMMIT语句的设置临时表有两种类型
- ON COMMIT DELETE ROWS 指定临时表与特定事务相关。在事务结束前,数据一直被保存在表中,当事务结束时,表中的数据将全部被删除(truncate掉)。如果你执行了commit或者ddl命令临时表中的数据将全部被删除。
- ON COMMIT PRESERVE ROWS指定临时表与特定会话相关。在会话结束前,数据一直被保存在表中,当会话结束时,表中的数据将全部被删除(truncate掉)。如果你输入exit命令退出了SQL*PLUS临时表中的数据将全部被删除。
事务相关的临时表
1.下面的语句创建事务相关的临时表
2.在临时表中插入数据
3.查看表中的数据
4.执行commit命令
5.查看临时表中的数据,由于创建的是事务相关的临时表,所以在commit执行后,表中的数据全部被删除
会话相关的临时表
1.创建会话相关的临时表(一个会话看不到其他会话在临时表中插入的数据)
2.插入数据并且在commit前后查看表中的数据
3.结束会话
4.创建一个新的回话连接
一些说明:
- 不要被关键字global迷惑,在oracle中没用相应的local关键字,创建临时表必须使用global
- 如果对临时表执行了truncate命令,只有当前会话的数据被删除,其他会话的数据不受影响
- 临时表中的数据在会话结束后会被自动删除,即使会话异常结束也一样
- 可以在临时表上创建索引,索引的范围和数据库会话一样
- 可以在临时表上创建视图
- 可以在临时表上创建触发器
- 对于使用了连接池的OLTP应用来说,应该使用事务相关的临时表。