臨時表:像普通表一樣,有結構,但是對數據的管理上不一樣,臨時表存儲事務或會話的中間結果集,臨時表中保存的數據只對當前 會話可見,所有會話都看不到其他會話的數據,即使其他會話提交了,也看不到。臨時表不存在並發行為,因為他們對於當前會話都是獨立的。(它默認是事務級別的)
在oracle中臨時表可分為會話級臨時表和事務級別臨時表。
臨時表的作用:對於龐大的數據我們只要查詢其中一小部分結果集這樣我們可以借助臨時表。
1.會話級別臨時表
會話級臨時表是指臨時表中的數據只在會話生命周期之中存在,當用戶退出會話結束的時候,Oracle自動清除臨時表中數據。
create global temporary table aaa(id number) on commit oreserve rows;
insert into aaa values(100);
select * from aaa;
這是當你在打開另一個會話窗口的時候再次查詢,表內的數據就查詢不到了。
2.事務級別的臨時表
create global temporary table bbb(id number) on commit delete rows;
insert into bbb values(200);
select * from bbb;
這時當你執行了commit和rollback操作的話,再次查詢表內的數據就查不到了。
默認下的:
SQL> create global temporary table aaa as select * from dba_objects;
Table created.
SQL> select * from aaa;--沒有數據,因為省掉了on commit delete rows