您的位置:首頁技術文章
文章詳情頁

臨時表在Oracle數據庫與SQL Server數據庫中的異同(1)

瀏覽:126日期:2023-11-29 13:40:38

常見應用:

臨時表在數據庫設計中,有著舉足輕重的作用。

如我們可以利用臨時表的功能來限制同一個用戶名多次登陸到同一個系統中去。例如現在有一個財務管理系統,企業希望同一個用戶在同一時間里只能登陸一次,這主要是用來限制每位員工都以自己的用戶名與密碼登陸。如此限制的目的主要是為財務管理系統中的每張單據找到其主人。

原始方案:

在以前數據庫設計的時候,也有人不用臨時表進行這方面的限制,而用實體數據庫表來登記相關的信息。如在用戶信息表中有一列專門用來記錄用戶的當前登陸狀態。當用戶登陸系統后,該用戶登陸狀態的字段就改為Y,而當用戶退出系統能后,該字段的內容又改為N。這個方案看起來是可行的,但是,其在實際應用中,有一個非常大的漏洞。若用戶登陸到系統后,終端因為各種原因,如病毒、斷電等突然狀況,發生死機的話,此時,用戶雖然沒有登陸到系統中去,但是,因為其退出系統的時候,沒有正常退出,這就導致在財務管理系統中的用戶信息表中,顯示該用戶的登陸狀態仍然為Y。此時,用戶嘗試登陸到財務管理系統中去的話,就會被系統拒絕,系統會認為該用戶已經登陸了系統,不能重復登陸。

所以說,利用實體表來記錄用戶登陸的信息,存在著管理上的漏洞。

利用臨時表實現用戶重新登陸的限制:

后來,數據庫設計師們想,能否把該用戶登陸信息記錄在一張臨時性的表中呢?當用戶結束會話,無論是正常的退出還是因為意外情況的退出,只要用戶結束一個會話后,那么該臨時表中的內容就會清空。

若跟這個需求結合的話,數據庫設計師就希望能夠實現如下功能。

當用戶登陸系統開始一個會話后,數據庫系統就建立一張臨時表,該表中至少有一個內容,就是用戶的帳號(或者該帳號對應的ID)。當有其他用戶登陸到系統的時候,系統會先從這張臨時表中查詢,是否有相同的用戶記錄。若有的話,就會拒絕用戶的登陸,警告用戶已經有相同的用戶登陸了。當用戶正常退出系統或者因為以外情況退出系統結束當前會話的時候,那么數據庫系統就會清除這張表的內容。如此,當用戶下次登陸系統的話,即使是在意外情況下登陸系統的,也可以正常的登陸。

可見,數據庫的臨時表在企業實際應用中有著舉足輕重的作用。

在ORACLE數據庫與SQL SERVER數據庫中,都實現了臨時表的功能。不過兩者實現的方式有差異。而不同的實現方式又賦予了其不同的特點,這是我們在數據庫選型中不得不重視的一方面內容。

兩個數據庫臨時表實現方式的異同:

SQL SERVER臨時表跟ORACLE數據庫臨時表的差異,可以利用一句話來概括。SQL SERVER 臨時表是在需要用到的時候創建;而ORACLE 數據庫的臨時表,則是在數據庫初始化中就開始創建,在具體的會話或者事務開始后進行操作,結束一個會話或者結束一個事務后該數據庫的內容就會被清空。

1、在創建時的異同。 SQL SERVER 數據庫的臨時表,是在實際需要時創建的。具體的來說,可以利用SELECT語句與CREAT語句創建臨時表。如可以利用SELECT * INTO #USER_TEMP FROM USER;通過這條語句就可以在需要的時間創建一張臨時表。除此之外,還可以利用CREATE語句,在需要的時候創建臨時表。

而ORACLE數據庫,是在數據庫系統初始化的過程中,就需要建立臨時表。也就是在用戶安裝財務管理軟件系統時,初始化數據庫系統時,系統就會創建臨時表。而不是在臨時表需要用到的時候,才被創建。故,ORACLE數據庫的臨時表創建方式只有一種,在數據庫初始化的時候,利用CREATE創建數據庫臨時表。所以,ORACLE數據庫臨時表,又有另一種說法。我們一般稱ORACLE數據庫的臨時表是永久性的,只是臨時表的內容是臨時的,在需要用到臨時表時,只要直接調用即可,而不用臨時創建。這不像SQL SERVER數據庫那樣,只有在用到時,才創建該臨時表;當結束會話時,不僅表中的數據被清空了,而且該表也被刪除了。

筆者評論:

筆者還是比較喜歡ORACLE數據庫臨時表的實現方式。為什么呢?因為我們都知道,數據庫定義語言,如CREATE等,比較占用系統資源。若在數據庫SQL SERVER數據庫系統設計的過程中,前臺程序頻繁的使用CREATE等數據庫定義語言創建臨時表的話,會對SQL server數據庫系統的運行效率產生很大的不利影響;而且,每次運行的話,都會有類似的不利影響,因為每次運行都會有一個創建臨時表的過程。而ORCLE數據庫中,則是在系統初始化的時候才利用CREATE語句,所以,只是在系統初始化的時候,可能性能會受到影響,而在以后的數據庫運行中,就不會為這個老是運行CREATE語句而困饒。所以,我個人還是比較喜歡采用ORACLE系統的臨時表處理方案。

標簽: Oracle 數據庫
国产综合久久一区二区三区