Global Tempoary Table的好處是資料在這類型的資料表內只能被單一session存取,
假設A session建立了一個global tempoary table 命名為 test_global_temp,並insert了多筆資料; B session也可insert 資料到自己的 test_global_temp,內容並不受A session資料的影響. Global的意思是共享table名稱,資料卻是各自管理.
Part I - On Commit Delete Rows:
以下範例為 global temporary table on commit delete rows 的測試:
Session_A>create global temporary table test_global_temp
2 (num number(10))
3 on commit delete rows;
已建立表格.
begin
for i in 1..3 loop
insert into test_global_temp(num)
values(i);
end loop;
end;
/
PL/SQL 程序順利完成.
Session_A>select * from test_global_temp;
NUM
----------
1
2
3
已選取 3 個資料列.
Session_B>select * from test_global_temp;
沒有任何資料列被選取
Session_B>insert into test_global_temp(num) values(100);
已建立 1 個資料列.
Session_B>select * from test_global_temp;
NUM
----------
100
Session_B>commit;
確認完成.
Session_B>select * from test_global_temp;
沒有任何資料列被選取
Session_A>select * from test_global_temp;
NUM
----------
1
2
3
已選取 3 個資料列.
Session_A>commit;
確認完成.
Session_A>select * from test_global_temp;
沒有任何資料列被選取
Part II - On Commit Preserve Rows:
在一個session結束前,不論有沒有commit, global temporary table內的資料都會保留.
當這個session結束後,資料就會自動清空.