TEMPORARY TABLE自動刪除資料的時機


TEMPORARY TABLE會依據不同的使用者,分配各自獨立的Temp Segment,
如此一來,就可以讓不同的使用者,獨自操作Temporary Table,而不會互相干擾。
而在創建Temporary Table有一個指定參數,可以決定什麼時候要刪除資料。

1、ON COMMIT DELETE ROWS(只要commit就將資料除)

  CREATE GLOBAL TEMPORARY TABLE CUSADMIN.TMP_GGG
  (
    A  VARCHAR2(100 BYTE),
    B  VARCHAR2(100 BYTE)
  )
  ON COMMIT DELETE ROWS
  NOCACHE;

  測試:
 
    SQL> insert into cusadmin.tmp_ggg values('aa','bb');
    1 row created.

    SQL> select * from cusadmin.tmp_ggg;
    A          B                                                                          
    -------    -----------
    aa         bb                                                                    

    SQL> commit;
    Commit complete.

    SQL> select * from cusadmin.tmp_ggg;
    no rows selected
 
 
2、ON COMMIT PRESERVE ROWS(在同一Sessin期間,資料是保存的)

  CREATE GLOBAL TEMPORARY TABLE CUSADMIN.TMP_GGG
  (
    A  VARCHAR2(100 BYTE),
    B  VARCHAR2(100 BYTE)
  )
  ON COMMIT PRESERVE ROWS
  NOCACHE;

  測試:
 
    SQL> insert into cusadmin.tmp_ggg values('aa','bb');
    1 row created.

    SQL> select * from cusadmin.tmp_ggg;
    A          B                                                                        
    ------     --------
    aa         bb                                                                            
                                                                               
    SQL> commit;
    Commit complete.

    SQL> select * from cusadmin.tmp_ggg;
    A          B                                                                        
    ------     --------
    aa         bb                                                                          

    SQL> disconnect;

    SQL> connect cusadmin/XXXXX@test
    Connected.
    SQL> select * from cusadmin.tmp_ggg;
    no rows selected

在建立Temporary Table時,其預設參數為ON COMMIT DELETE ROWS,
但是有時候在撰寫程式時,都會有數個commit,再取出資料的動作,
此時最好是使用ON COMMIT PRESERVE ROWS。