close


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結束後,資料就會自動清空.

 

arrow
arrow
    全站熱搜

    DanBrother 發表在 痞客邦 留言(0) 人氣()