Oracle Spatial臨時(shí)表具體設(shè)計(jì)及功能
2024-08-29 13:50:39
供稿:網(wǎng)友
Oracle 臨時(shí)表功能介紹: Oracle中的臨時(shí)表是全局的,需要在數(shù)據(jù)庫(kù)設(shè)計(jì)時(shí)創(chuàng)建完成,而不是程序使用時(shí)。每個(gè)登陸用戶都使用這一個(gè)相同的臨時(shí)表,但互相之間看不到彼此的數(shù)據(jù),也就是說(shuō)臨時(shí)表是會(huì)話獨(dú)立的。 Oracle 的臨時(shí)表分為事務(wù)型和會(huì)話型。 事務(wù)型臨時(shí)表就是指在事務(wù)處理過(guò)程中插入的記錄只在事務(wù)提交或回滾之前有效,一旦事務(wù)完成,表中的記錄便被自動(dòng)清除。 會(huì)話型臨時(shí)表指臨時(shí)表中的數(shù)據(jù)在本次會(huì)話期間一直有效,直到會(huì)話結(jié)束。會(huì)話結(jié)束后表中針對(duì)此次會(huì)話的數(shù)據(jù)會(huì)自動(dòng)清空。 Oracle 臨時(shí)表的不足之處: 1、不支持lob對(duì)象,例如 Spatial 的SDO_GEOMETRY。這也許是設(shè)計(jì)者基于運(yùn)行效率的考慮,但實(shí)際應(yīng)用中確實(shí)需要此功能時(shí)就無(wú)法使用臨時(shí)表了。 2、不支持主外鍵關(guān)系。這意味著臨時(shí)表 鑒于以上原因,灑家設(shè)計(jì)了一份自定義的臨時(shí)表處理辦法,使之可以支持Oracle Spatial數(shù)據(jù)類型和主外鍵關(guān)系,而且不會(huì)出現(xiàn)并發(fā)沖突。 1、以常規(guī)表的形式創(chuàng)建臨時(shí)數(shù)據(jù)表的表結(jié)構(gòu),但要在每一個(gè)表的主鍵中加入一個(gè) sessionID 列以區(qū)分不同的會(huì)話。(可以有l(wèi)ob列和主外鍵) 2、寫一個(gè)用戶注銷觸發(fā)器,在用戶結(jié)束會(huì)話的時(shí)候刪除本次會(huì)話所插入的所有記錄(SessionID等于本次會(huì)話ID的記錄)。 3、程序?qū)懭霐?shù)據(jù)時(shí),要順便將當(dāng)前的會(huì)話ID(SessionID)寫入表中。 4、程序讀取數(shù)據(jù)時(shí),只讀取與當(dāng)前會(huì)話ID相同的記錄即可。 功能增強(qiáng)的擴(kuò)展設(shè)計(jì): 1、可以在數(shù)據(jù)表上建立一個(gè)視圖,視圖對(duì)記錄的篩選條件就是當(dāng)前會(huì)話的SessionID。 2、數(shù)據(jù)表中的SessionID列可以通過(guò)Trigger實(shí)現(xiàn),以實(shí)現(xiàn)對(duì)應(yīng)用層的透明性。 3、高級(jí)用戶可以訪問(wèn)全局?jǐn)?shù)據(jù),以實(shí)現(xiàn)更加復(fù)雜的功能。 擴(kuò)展臨時(shí)表的優(yōu)點(diǎn): 1、實(shí)現(xiàn)了與Oracle的基于會(huì)話的臨時(shí)表相同的功能。 2、支持SDO_GEOMETRY等lob數(shù)據(jù)類型。 3、支持表間的主外鍵連接,且主外鍵連接也是基于會(huì)話的。 4、高級(jí)用戶可以訪問(wèn)全局?jǐn)?shù)據(jù),以實(shí)現(xiàn)更加復(fù)雜的功能。