文章詳情頁
Oracle中自定義臨時表的實現(xiàn)及其在Oracle Spatial中的應(yīng)用
瀏覽:133日期:2023-11-21 13:25:19
Oracle 臨時表功能介紹: Oracle中的臨時表是全局的,需要在數(shù)據(jù)庫設(shè)計時創(chuàng)建完成,而不是程序使用時。每個登陸用戶都使用這一個相同的臨時表,但互相之間看不到彼此的數(shù)據(jù),也就是說臨時表是會話獨立的。 Oracle 的臨時表分為事務(wù)型和會話型。 事務(wù)型臨時表就是指在事務(wù)處理過程中插入的記錄只在事務(wù)提交或回滾之前有效,一旦事務(wù)完成,表中的記錄便被自動清除。 會話型臨時表指臨時表中的數(shù)據(jù)在本次會話期間一直有效,直到會話結(jié)束。會話結(jié)束后表中針對此次會話的數(shù)據(jù)會自動清空。Oracle 臨時表的不足之處: 1、不支持lob對象,例如 Spatial 的SDO_GEOMETRY。這也許是設(shè)計者基于運行效率的考慮,但實際應(yīng)用中確實需要此功能時就無法使用臨時表了。 2、不支持主外鍵關(guān)系。這意味著臨時表鑒于以上原因,灑家設(shè)計了一份自定義的臨時表處理辦法,使之可以支持Oracle Spatial數(shù)據(jù)類型和主外鍵關(guān)系,而且不會出現(xiàn)并發(fā)沖突。 1、以常規(guī)表的形式創(chuàng)建臨時數(shù)據(jù)表的表結(jié)構(gòu),但要在每一個表的主鍵中加入一個 SessionID <NUMBER> 列以區(qū)分不同的會話。(可以有l(wèi)ob列和主外鍵) 2、寫一個用戶注銷觸發(fā)器,在用戶結(jié)束會話的時候刪除本次會話所插入的所有記錄(SessionID等于本次會話ID的記錄)。 3、程序?qū)懭霐?shù)據(jù)時,要順便將當(dāng)前的會話ID(SessionID)寫入表中。 4、程序讀取數(shù)據(jù)時,只讀取與當(dāng)前會話ID相同的記錄即可。功能增強的擴展設(shè)計: 1、可以在數(shù)據(jù)表上建立一個視圖,視圖對記錄的篩選條件就是當(dāng)前會話的SessionID。 2、數(shù)據(jù)表中的SessionID列可以通過Trigger實現(xiàn),以實現(xiàn)對應(yīng)用層的透明性。 3、高級用戶可以訪問全局?jǐn)?shù)據(jù),以實現(xiàn)更加復(fù)雜的功能。擴展臨時表的優(yōu)點: 1、實現(xiàn)了與Oracle的基于會話的臨時表相同的功能。 2、支持SDO_GEOMETRY等lob數(shù)據(jù)類型。 3、支持表間的主外鍵連接,且主外鍵連接也是基于會話的。 4、高級用戶可以訪問全局?jǐn)?shù)據(jù),以實現(xiàn)更加復(fù)雜的功能。 八風(fēng)不動2004年11月22日涂鴉于大連開發(fā)區(qū)管委會辦公室
標(biāo)簽:
Oracle
數(shù)據(jù)庫
排行榜
