- 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;