oracle中的temporary table用法

一 :使用場景

臨時表適合需要把結果集放在內存中的的應用,因爲臨時表就是一個多DMl操作的結構,臨時表的必須先insert然後在updae,select,delete
如果會話rollback,臨時表的數據也會丟失
例如:
例如我們網上購物中的購物車,就比較適合用臨時表

臨時表有兩種隔離機制,一種是會話隔離,一種是隔離
會話隔離(PRESERVE ROWS):在當前回話有效,當回話終止後 truncate table
事物隔離(DELETE ROWS):在事物級別有效 當commit 後truncate table

二:索引

對於臨時表的索引也是可以創建的,臨時表的索引作用範圍也是會話級別和事物級別

三:存儲空間:

臨時表默認的存儲空間爲臨時表空間,不過也可以自己設置表空間

CREATE TEMPORARY TABLESPACE tbs_t1 
    TEMPFILE 'tbs_t1.f' SIZE 50m REUSE AUTOEXTEND ON
    MAXSIZE UNLIMITED
    EXTENT MANAGEMENT LOCAL UNIFORM SIZE 64K;

備份恢復:

由於是臨死表,沒有日誌,備份,恢復的時候也不會恢復

四:eg

CREATE GLOBAL TEMPORARY TABLE admin_work_area
        (startdate DATE,
         enddate DATE,
         class CHAR(20))
      ON COMMIT DELETE ROWS/PRESERVE ROWS;

測試:
創建事物級別的臨
CREATE GLOBAL TEMPORARY Table test_tmp
(a Number)
ON COMMIT DELETE ROWS;

--在表中插入數據:  
SQL> insert into test_tmp(a) values(1);

1 row created.

SQL> select *from test_tmp;

 A
----------
 1

--提交事物
SQL> commit;

Commit complete.

SQL> select * from test_tmp;

no rows selected

創建基於會話級別的臨時表:

CREATE GLOBAL TEMPORARY Table test_tmp
        (a Number)
      ON Commit PRESERVE  ROWS;
當前會話:     
SQL> select sid from v$session where sid=(select sid from v$mystat where rownum=1);

    SID
----------
    41

--插入數據
SQL> insert into test_tmp(a) values(1);

1 row created.

SQL> select * from test_tmp;

     A
----------
     1
--提交事物
SQL> commit;

Commit complete.

SQL> select * from test_tmp;

     A
----------
     1

另起一個會話:

SQL> Select Sid From v$session t Where t.sid=(Select Sid From v$mystat Where Rownum=1);

    SID
----------
    43

SQL> select * from test_tmp;

no rows selected
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章