- 临时表减少了事务产生的重做信息,可以节省重做日志的大小
- 在临时表中可以使用主键和索引,以便提高临时表的性能,同时还可以在临时表上添加约束
- 在临时表中可以像普通表一样进行新增、修改和删除。但是不同的用户无法看到其他用户的临时表数据,因为临时表中的内容仅对操作它的会话可见
- 通过将复杂的查询结果保存到临时表中,可以提供高效的数据访问
- Oracle中的临时表是静态的,意味着在使用之前必须先行创建
在 SQL Server 中,可以随时创建临时表,这些临时表保存在 SQL Server 的 tempdp 数据库中,在会话结束时 SQL Server 会自动删除临时表,因此,在 SQL Server 中可以运行时动态创建临时表
而Oracle的临时表必须先行创建,这与Oracle的后期绑定机制有关,在会话结束时并不会自动清除临时表,但是临时表中的数据实际上只在本会话范围内有效,因此其他的用户能够看到该临时表,也无法查看其中的数据。创建的临时表将会存储到临时表空间中,并不会永久存储。
在Oracle中,临时表使用 CREATE GLOBAL TEMPORARY 语句进行创建,基本语法如下:
create GLOBAL TEMPORARY TABLE [方案.]表名
(列名 列类型 [DEFAULT expr] [, ...])
{on COMMIT DELETE ROWS | --指定创建事务级临时表
ON COMMIT PRESERVE ROWS}; --指定创建会话级临时表
可以看到,除了 CREATE GLOBAL TEMPORARY TABLE 语句上的不同之外,Oracle的临时表还要求指定是事务级的临时表还是会话级的临时