Oracle臨時表學習小結

2021-10-04 17:37:40 字數 1894 閱讀 4721

最近因為工作的原因,需要使用到oracle的臨時表。發現oracle的臨時表和sql-server的臨時表之間還是有很多的不同之處。為了能夠徹底弄清oracle臨時表的效能,也為了更好的在專案中決策是否使用臨時表,我花了一些時間翻閱了一下資料。

下面對這段時間臨時表的學習做乙個總結。

我們知道在資料庫中除了可以建立永久表外,還可以建立臨時表(temporary table)。那麼為什麼需要臨時表呢?它給我們帶來了什麼優點?和永久表相比臨時表有以下幾個優點:

1.臨時表在操作上比永久表要更快。因為臨時表不需要往編目表中插入條目,臨時表的使用也不需要訪問編目表,因此也沒有編目表的爭用。

2.僅有建立臨時表的app才可以訪問臨時表,在處理臨時表時沒有鎖。因為臨時表的資料只對當前session有效,每個session都有自己的臨時資料,並且不能訪問其他session的臨時表中的資料。

因此,臨時表不需要dml鎖。

3.如果指定not logged選項,處理臨時表時不記日誌。所以如果有僅在資料庫的乙個會話中使用的大量的臨時資料,這些資料存入臨時錶能大大提高效能。

4.臨時表的資料不會永久存在(同永久表最大的區別),當乙個會話結束或者事務結束的時候,資料庫自動清除資料。另外oracle臨時表建立後,不會刪除(和sql-server的不同之處)。

臨時表詳細介紹

oracle的臨時表有兩種型別:

1.會話級臨時表:(on commit preserve rows)是指資料只在當前會話中有效的臨時表。當關閉當前會話或者進行新的連線之後,資料表中的內容就會被清除。

view plain

create global tempopary table temp1

(id number(12) primary key,name varchar2(10))

on commit preserve rows;

我們通過insert into語句往temp1表中插入一條記錄,commit後,我們通過select語句進行查詢時,可以查到該條記錄。

當關閉當前會話,重新連線資料庫後,再利用select語句查詢時,我們發現temp1表已經沒有此條記錄啦。

2.事務級臨時表:(on commit delete rows)是指資料只有在當前事務內有效。

view plain

create global temporary table temp2 (id number(12) primary key,name varchar2(10)) on commit delete rows

一般情況下,如果建表時沒有特殊指明,預設都是建立事務型臨時表,所以可以省略 on commit delete rows。

我們通過insert into語句往temp2中插入一條記錄,不commit,直接select,可以查到該條記錄。commit後,再select查詢發現臨時表資料為空。

oracle臨時表和sql-server臨時表的比較

1.sql-server中臨時表是一種"記憶體表「,表儲存在tempdb中。oracle臨時表的定義會保留在資料字典中,要執行drop table來刪除。

2.sql-server中臨時表不存在事務級臨時表。

3.sql-server中的全域性臨時表(##)是指多個連線共享同一片記憶體,當沒有指標引用該記憶體區域時,sql-server自動釋放全域性臨時表。

4.sql-server本地臨時表(#)與oracle的會話級臨時表類似,但oracle在會話結束後不會刪除表。

5.oracle不是記憶體資料庫,所以如果oracle類似sql-server頻繁的對臨時表進行建立和刪除必定會影響效能,所以oracle要使用者自己drop table。

6.oracle中如果要多個使用者共享乙個表(類似於sql-server中的全域性臨時表),則可以利用永久表,並且在表中新增一些可以唯一標識使用者的列。利用觸發器和檢視,當使用者退出的時候,根據該登入使用者的唯一資訊刪除相應表中的資料。

Oracle課程小結

1.dual dual 是 oracle中的乙個實際存在的表,任何使用者均可讀取,常用在沒有目標表的select語句塊中 dual就是個一行一列的表,如果你往裡執行insert delete truncate操作,就會導致很多程式出問題 不要去執行drop dual的操作,否則會使系統不能用,資料庫...

oracle系統表總結

oracle系統表處理 1.取得指定使用者的所有表名 範例 1.selectowneras 物件所有者 object nameas 表名 object idas 物件編號 fromdba objectswhereowner raxnyb andobject type table orderbyown...

Oracle學習筆記

一 sys使用者和system使用者 oracle安裝會自動的生成sys使用者和system使用者 1 sys使用者是超級使用者,具有最高許可權,具有sysdba角色,有create database的許可權,該使用者預設的密碼是change on install 2 system使用者是管理操作員...