Oracle中自訂暫存資料表的實現及其在Oracle Spatial中的應用
來源:互聯網
上載者:User
oracle|暫存資料表
Oracle 暫存資料表功能介紹:
Oracle中的暫存資料表是全域的,需要在資料庫設計時建立完成,而不是程式使用時。每個登陸使用者都使用這一個相同的暫存資料表,但互相之間看不到彼此的資料,也就是說暫存資料表是會話獨立的。
Oracle 的暫存資料表分為事務型和會話型。
事務型暫存資料表就是指在交易處理過程中插入的記錄只在事務提交或復原之前有效,一旦事務完成,表中的記錄便被自動清除。
會話型暫存資料表指暫存資料表中的資料在本次會話期間一直有效,直到會話結束。會話結束後表中針對此次會話的資料會自動清空。
Oracle 暫存資料表的不足之處:
1、不支援lob對象,例如 Spatial 的SDO_GEOMETRY。這也許是設計者基於運行效率的考慮,但實際應用中確實需要此功能時就無法使用暫存資料表了。
2、不支援主外鍵關係。這意味著暫存資料表
鑒於以上原因,洒家設計了一份自訂的暫存資料表處理辦法,使之可以支援Oracle Spatial資料類型和主外鍵關係,而且不會出現並發衝突。
1、以常規表的形式建立臨時資料表的表結構,但要在每一個表的主鍵中加入一個 SessionID <NUMBER> 列以區分不同的會話。(可以有lob列和主外鍵)
2、寫一個使用者登出觸發器,在使用者結束會話的時候刪除本次會話所插入的所有記錄(SessionID等於本次會話ID的記錄)。
3、程式寫入資料時,要順便將當前的會話ID(SessionID)寫入表中。
4、程式讀取資料時,唯讀取與當前會話ID相同的記錄即可。
功能增強擴充設計:
1、可以在資料表上建立一個視圖,視圖對記錄的篩選條件就是當前會話的SessionID。
2、資料表中的SessionID列可以通過Trigger實現,以實現對應用程式層的透明性。
3、進階使用者可以訪問全域資料,以實現更加複雜的功能。
擴充暫存資料表的優點:
1、實現了與Oracle的基於會話的暫存資料表相同的功能。
2、支援SDO_GEOMETRY等lob資料類型。
3、支援表間的主外鍵串連,且主外鍵串連也是基於會話的。
4、進階使用者可以訪問全域資料,以實現更加複雜的功能。
八風不動2004年11月22日塗鴉於大連開發區管委會辦公室