Oracle資料庫開發——臨時表

呆呆笨笨的魚發表於2014-04-24
關於臨時表,在Oracle資料庫中可以使用create global temporary table 語句來建立。
臨時表建立後,其結構將一直存在,但是其中的資料在特定的條件下自動釋放。
依據釋放的條件不同,臨時表分為 事務級臨時表 和 會話級臨時表。

建立語法create global temporary table() on commit {delete 事務級 | preserve 會話級} rows; 

例:建立如下3張表
--普通堆表
create table student
(s_id integer primary key
,sname varchar2(10)
);

--事務級臨時表
create global temporary table student_tmp1
(s_id integer primary key
,sname varchar2(10)
)on commit delete rows;

--會話級臨時表
create global temporary table student_tmp2
(s_id integer primary key
,sname varchar2(10)
)on commit preserve rows;

檢視定義(臨時表TABLESPACE_NAME項為空,插入資料的時候應該時候應該放到臨時表空間吧,有興趣自己去求證一下吧)
SQL> select x.TABLE_NAME,x.TABLESPACE_NAME,x.TEMPORARY from user_tables x where x.TABLE_NAME in ('STUDENT_TMP1','STUDENT_TMP2','STUDENT');
 
TABLE_NAME                     TABLESPACE_NAME                TEMPORARY
------------------------------ ------------------------------ ---------
STUDENT                        USERS                          N
STUDENT_TMP1                                                  Y
STUDENT_TMP2                                                  Y

接下來,看事務級臨時表與會話級臨時表的區別

SQL> insert into student_tmp1 values (12345,'criss');
 
1 row inserted
 
SQL> insert into student_tmp2 values (12345,'criss');
 
1 row inserted
 
SQL> select * from student_tmp1;
 
                                   S_ID SNAME
--------------------------------------- ----------
                                  12345 criss
 
SQL> select * from student_tmp2;
 
                                   S_ID SNAME
--------------------------------------- ----------
                                  12345 criss
                                  
未提交前,兩張臨時表都能查到資料,下面進行提交,再次查詢

SQL> commit;
 
Commit complete
 
SQL> select * from student_tmp1;
 
                                   S_ID SNAME
--------------------------------------- ----------
 
SQL> select * from student_tmp2;
 
                                   S_ID SNAME
--------------------------------------- ----------
                                  12345 criss
                                  
此時,事務級臨時表(student_tmp1)資料被清空。會話級臨時表(student_tmp2)資料仍保留。

總結一下:在事務提交時,事務級臨時表中的資料會被系統自動刪除。
          會話級臨時表在會話斷開前,其中的資料不會刪除,斷開後清空。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28929558/viewspace-1148357/,如需轉載,請註明出處,否則將追究法律責任。

相關文章