- 1. 创建SQL语句
CREATE GLOBAL TEMPORARY TABLE tablename (columns) [ ON COMMIT PRESERVE | DELETE ROWS ]
SQL> create global temporary table emp_temp(eno number) on commit delete rows;
-- transaction level duration,事务级别,此为默认选项
SQL> create global temporary table emp_temp(eno number) on commit preserve rows;
-- session level duration,会话级别
- 2. 隔离性:
数据只在会话或者事务级别可见。不同用户可以使用同一个临时表,但是看到的都是各自的数据。
- 3. 表上可以创建索引、视图、触发器等对象。
- 4. 索引只有在临时表是empty时可创建。
- 5. 临时表不产生数据的redo,但是会生成undo的redo。
- 6. 临时表目前只支持GLOBAL的,所以创建语句为create global temporary table XXX。
- 7. 使用truncate只对当前会话有效。
- 8. 不能export/import表上的数据,只能导入导出表定义。
- 9. 临时段在第一次insert或CATS时产生。
缺点:
- 1. 表定义不能自动drop。
- 2. 临时表目前只支持GLOBAL。
- 3. 只有无会话时才能DDL,否则可能报错:
ORA-14452: attempt to create, alter or drop an index on temporary table already in use
- 4. 临时表上默认不收集统计信息,如果需要收集统计信息,首先要确保临时表属性为ON COMMIT PRESERVE ROWS。
收集统计信息命令:analyze table table_name compute statistics;