詳解Oracle臨時表的幾種用法及意義

2021-06-07 08:51:50 字數 2429 閱讀 1496

在這裡我們總結了oracle臨時表的集中用法,臨時表建立之後基本不占用表空間,如果你沒有指定臨時表存放的表空的時候,你插入到臨時表的資料是存在系統的臨時表空間中。

我對臨時表的理解:在 oracle 中建立一張表,這個表不用於其他的什麼功能,主要用於自己的軟體系統一些特有功能才用的,而當你用完之後表中的資料就沒用了。 oracle 的臨時表建立之後基本不占用表空間,如果你沒有指定臨時表(包括臨時表的索引)存放的表空的時候,你插入到臨時表的資料是存放在 oracle 系統的臨時表空間中( temp )。

2 、臨時表的建立

建立oracle 臨時表,可以有兩種型別的臨時表:

會話級的臨時表

事務級的臨時表 。

1) 會話級的臨時表因為這這個臨時表中的資料和你的當前會話有關係,當你當前session 不退出的情況下,臨時表中的資料就還存在,而當你退出當前session 的時候,臨時表中的資料就全部沒有了,當然這個時候你如果以另外乙個session 登陸的時候是看不到另外乙個session 中插入到臨時表中的資料的。即兩個不同的session 所插入的資料是互不相干的。當某乙個session 退出之後臨時表中的資料就被截斷(truncate table ,即資料清空)了。會話級的臨時表建立方法:

create global temporary table table_name

(col1 type1,col2 type2...) on commit preserve rows ;

舉例:create global temporary table student

(stu_id number(5),

class_id number(5),

stu_name varchar2(8),

stu_memo varchar2(200)) on commit preserve rows ;

2) 事務級臨時表是指該臨時表與事務相關,當進行事務提交或者事務回滾的時候,臨時表中的資料將自行被截斷,其他的內容和會話級的臨時表的一致(包括退出session 的時候,事務級的臨時表也會被自動截斷)。事務級臨時表的建立方法:

create global temporary table table_name

(col1 type1,col2 type2...) on commit delete rows ;

舉例:create global temporary table classes

(class_id number(5),

class_name varchar2(8),

class_memo varchar2(200)) on commit delete rows ;

3) 兩中型別臨時表的區別

會話級臨時表採用 on commit preserve rows ;而事務級則採用 on commit delete rows ;用法上,會話級別只有當會話結束臨時表中的資料才會被截斷,而且事務級臨時表則不管是 commit 、 rollback 或者是會話結束,臨時表中的資料都將被截斷

4 )什麼時候使用臨時表

1 )、當某乙個 sql 語句關聯的表在 2 張及以上,並且和一些小表關聯。可以採用將大表進行分拆並且得到比較小的結果集合存放在臨時表中

2 )、程式執行過程中可能需要存放一些臨時的資料,這些資料在整個程式的會話過程中都需要用的等等。

3 . 例子:略

4 .臨時表的不足之處

1 )不支援 lob 物件,這也許是設計者基於執行效率的考慮,但實際應用中確實需要此功能時就無法使用臨時表了。

2 )不支援主外來鍵關係

所以,由於以上原因,我們可以自己建立臨時表,以彌補 oracle 臨時表的不足之處

上面的都是本人經過測試的,但下面是在網上搜尋到的方法,本人具體沒有測試過,不過覺得可行性很強,有時間測試下

建立方法:

1 、以常規表的形式建立臨時資料表的表結構,但要在每乙個表的主鍵中加入乙個 sessionid 列以區分不同的會話。(可以有 lob 列和主外來鍵)

2 、寫乙個使用者登出觸發器,在使用者結束會話的時候刪除本次會話所插入的所有記錄 (sessionid 等於本次會話 id 的記錄 ) 。

3 、程式寫入資料時,要順便將當前的會話 id(sessionid) 寫入表中。

4 、程式讀取資料時,只讀取與當前會話 id 相同的記錄即可。

功能增強的擴充套件設計:

1 、可以在資料表上建立乙個檢視,檢視對記錄的篩選條件就是當前會話的sessionid 。

2 、資料表中的sessionid 列可以通過trigger 實現,以實現對應用層的透明性。

3 、高階使用者可以訪問全域性資料,以實現更加複雜的功能。

擴充套件臨時表的優點:

1 、實現了與oracle 的基於會話的臨時表相同的功能。

2 、支援sdo_geometry 等lob 資料型別。

3 、支援表間的主外來鍵連線,且主外來鍵連線也是基於會話的。

4 、高階使用者可以訪問全域性資料,以實現更加複雜的功能

oracle的臨時表

oracle的臨時表在應用系統中有很大的作用,它可以讓使用者只能夠操作各自的資料中而互不干擾,不用擔心會破壞或影響其他session transaction的資料,這也是資料安全的一種解決方法。臨時表分為session transaction兩種,session級的臨時表資料在整個session都存...

ORACLE的臨時表

oracle的臨時表在應用系統中有很大的作用,它可以讓使用者只能夠操作各自的資料中而互不干擾,不用擔心會破壞或影響其他session transaction的資料,這也是資料安全的一種解決方法。臨時表分為session transaction兩種,session級的臨時表資料在整個session都存...

ORACLE的臨時表

建立oracle的臨時表 create global temporary table tablename col1 varchar2 10 col2 number on commit preserve delete rows 這種臨時表不占用表空間,而且不同的session之間互相看不到對方的資料 ...