總結:
1、session級的臨時表,只有在truncate table、session結束才能釋放對錶的鎖定,等所有session釋放bounding臨時表,才能drop臨時表;否這會報ORA-14452: 試圖建立, 更改或刪除正在使用的臨時表中的索引。
2、臨時表需要drop才能去掉其定義
3、臨時表不產生redo、undo資訊
4、臨時表各個session間的資料是不可見的,只能看到自己session的資料
<wbr> <wbr> <wbr>
在Oracle8i或以上版本中,可以建立以下兩種臨時表:
<wbr> <wbr> <wbr>
1.會話特有的臨時表
<wbr> <wbr> <wbr> <wbr>
CREATE GLOBAL TEMPORARY
()
<wbr> <wbr> <wbr> <wbr>
ON COMMIT PRESERVE ROWS;
<wbr> <wbr>
<wbr> <wbr> <wbr>
2.事務特有的臨時表
<wbr> <wbr> <wbr> <wbr>
CREATE GLOBAL TEMPORARY
()
<wbr> <wbr> <wbr> <wbr>
ON COMMIT DELETE ROWS;
<wbr> <wbr> <wbr> <wbr>
CREATE GLOBAL TEMPORARY TABLE MyTempTable
<wbr> <wbr> <wbr>
所建的臨時表雖然是存在的,但是你試一下insert
一條記錄然後用別的連線登上去select,記錄是空的,明白了吧,我把下面兩句話再貼一下:
<wbr> <wbr> <wbr> --ON COMMIT
DELETE ROWS 說明臨時表是事務指定,每次提交後ORACLE將截斷表(刪除全部行)
<wbr> <wbr> <wbr> --ON COMMIT
PRESERVE ROWS 說明臨時表是會話指定,當中斷會話時ORACLE將截斷表。
<wbr> <wbr> <wbr>
衝突的問題更本不用考慮.
<wbr> <wbr>
<wbr> <wbr> <wbr>
臨時表只是儲存當前會話(session)用到的資料,資料只在事務或會話期間存在。
<wbr> <wbr>
<wbr> <wbr> <wbr> 透過CREATE
GLOBAL TEMPORARY TABLE命令建立一個臨時表,對於事務型別的臨時表,
<wbr> <wbr> <wbr>
資料只是在事務期間存在,對於會話型別的臨時表,資料在會話期間存在。
<wbr> <wbr>
<wbr> <wbr> <wbr>
會話的資料對於當前會話私有。每個會話只能看到並修改自己的資料。DML鎖不會加到
臨時表的資料上。下面的語句控制行的存在性。
<wbr> <wbr>
<wbr> <wbr> <wbr> ● ON COMMIT
DELETE ROWS 表名行只是在事務期間可見
<wbr> <wbr> <wbr> ● ON COMMIT
PRESERVE ROWS 表名行在整個會話期間可見
<wbr> <wbr>
<wbr> <wbr> <wbr>
可以對臨時表建立索引,檢視,出發器,可以用export和import工具匯入匯出表的
定義,但是不能匯出資料。表的定義對所有的會話可見。
<wbr> <wbr> <wbr> Temporary
Tables臨時表
<wbr> <wbr> <wbr> 1.簡介
<wbr> <wbr> <wbr>
ORACLE資料庫除了可以儲存永久表外,還可以建立臨時表temporary
tables。這些臨時表用來儲存一個會話SESSION的資料,
<wbr> <wbr> <wbr>
或者儲存在一個事務中需要的資料。當會話退出或者使用者提交commit和回滾rollback事務的時候,臨時表的資料自動清空,
<wbr> <wbr> <wbr>
但是臨時表的結構以及後設資料還儲存在使用者的資料字典中。
<wbr> <wbr>
<wbr>臨時表只在oracle8i以及以上產品中支援。
<wbr> <wbr> <wbr> 2.詳細介紹
<wbr> <wbr>
<wbr>Oracle臨時表分為會話級臨時表 和 事務級臨時表。
<wbr> <wbr> <wbr>
會話級臨時表是指臨時表中的資料只在會話生命週期之中存在,當使用者退出會話結束的時候,Oracle自動清除臨時表中資料。
<wbr> <wbr> <wbr>
事務級臨時表是指臨時表中的資料只在事務生命週期中存在。當一個事務結束(commit or
rollback),Oracle自動清除臨時表中資料。
<wbr> <wbr> <wbr>
臨時表中的資料只對當前Session有效,每個Session都有自己的臨時資料,並且不能訪問其它Session的臨時表中的資料。因此,
<wbr> <wbr> <wbr>
臨時表不需要DML鎖.當一個會話結束(使用者正常退出 使用者不正常退出
ORACLE例項崩潰)或者一個事務結束的時候,Oracle對這個會話的表執行 TRUNCATE
語句清空臨時表資料.但不會清空其它會話臨時表中的資料.
<wbr> <wbr> <wbr>
你可以索引臨時表和在臨時表基礎上建立檢視.同樣,建立在臨時表上的索引也是臨時的,也是隻對當前會話或者事務有效. <wbr> <wbr>
<wbr> <wbr> <wbr>
臨時表可以擁有觸發器.
<wbr> <wbr> <wbr>
3.建立臨時表
<wbr> <wbr>
臨時表的定義對所有會話SESSION都是可見的,但是表中的資料只對當前的會話或者事務有效.
<wbr> <wbr> 建立方法:
<wbr> <wbr> <wbr> 1) ON COMMIT
DELETE ROWS 定義了建立事務級臨時表的方法.
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr>
CREATE GLOBAL TEMPORARY TABLE admin_work_area
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr>
(startdate DATE,
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr>
enddate DATE,
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr>
class CHAR(20))
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr>
ON COMMIT DELETE ROWS;
<wbr> <wbr> <wbr> <wbr>
EXAMPLE:
<wbr> <wbr> <wbr> <wbr>
SQL> CREATE GLOBAL TEMPORARY TABLE
admin_work_area
<wbr> <wbr>
<wbr>2 <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr>
(startdate DATE,
<wbr> <wbr>
3 <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr>
enddate DATE,
<wbr> <wbr> <wbr>
4 <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr>
class CHAR(20))
<wbr> <wbr> <wbr>
5 <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr>
ON COMMIT DELETE ROWS;
<wbr> <wbr> <wbr>
SQL> create table permernate( a number);
<wbr> <wbr> <wbr>
SQL> insert into admin_work_area
values(sysdate,sysdate,'temperary table');
<wbr> <wbr> <wbr>
SQL> insert into permernate values(1);
<wbr> <wbr> <wbr>
SQL> commit;
<wbr> <wbr> <wbr>
SQL> select * from admin_work_area;
<wbr> <wbr> <wbr>
SQL> select