ORACLE數(shù)據(jù)庫(kù)是當(dāng)前企業(yè)級(jí)數(shù)據(jù)庫(kù)的先驅(qū),使用它可以處理不同的業(yè)務(wù)需求。在大型企業(yè)中,往往需要多個(gè)職能部門協(xié)同工作,不同的部門對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)有著不同的使用要求。為了避免不同部門的數(shù)據(jù)操作互相干擾,我們往往會(huì)需要使用只讀視圖。
什么是只讀視圖呢?在ORACLE數(shù)據(jù)庫(kù)中,視圖是一個(gè)特殊的表。它僅僅是對(duì)原始表的數(shù)據(jù)行和列的選擇、篩選,這些信息被存儲(chǔ)在數(shù)據(jù)字典中。視圖是虛擬表,其本身沒(méi)有數(shù)據(jù)。視圖從基本表中導(dǎo)出,可以包括選定的行和列,或者進(jìn)行數(shù)據(jù)轉(zhuǎn)換。在ORACLE數(shù)據(jù)庫(kù)中,視圖默認(rèn)情況下是可讀寫的。只有在創(chuàng)建時(shí)顯式指定了視圖只讀屬性時(shí),才是只讀視圖。
在ORACLE數(shù)據(jù)庫(kù)中,只讀視圖可以極大的提高數(shù)據(jù)的安全性。例如,在金融領(lǐng)域,關(guān)鍵數(shù)據(jù)的安全性要求極高,如果普通用戶可以直接對(duì)數(shù)據(jù)進(jìn)行修改,那么就會(huì)造成無(wú)法挽回的損失。所以,金融機(jī)構(gòu)通常會(huì)建立只讀視圖來(lái)保證數(shù)據(jù)的安全,僅僅允許各部門瀏覽數(shù)據(jù)、執(zhí)行查詢等只讀操作,而禁止對(duì)數(shù)據(jù)進(jìn)行修改、刪除等破壞性的操作。
下面我們可以通過(guò)舉一個(gè)栗子,來(lái)說(shuō)明如何創(chuàng)建一個(gè)只讀視圖。
CREATE VIEW V_EMP_DEPT AS SELECT e.empno, e.ename, e.job, d.dname, d.loc FROM emp e, dept d WHERE e.deptno = d.deptno WITH READ ONLY;
在這個(gè)例子中,我們首先定義了一個(gè)只讀視圖 V_EMP_DEPT ,其中我們僅僅需要選擇 EMP 和 DEPT 兩張表中的部分列。在最后我們?cè)谝晥D定義語(yǔ)句的結(jié)尾處使用了 WITH READ ONLY 語(yǔ)句,這個(gè)語(yǔ)句表示該視圖只能進(jìn)行只讀操作。
當(dāng)然,你也可以通過(guò) ALTER VIEW 語(yǔ)句來(lái)更改一個(gè)視圖的只讀屬性:
ALTER VIEW V_EMP_DEPT READ ONLY;
此外,要注意的是只讀視圖僅僅限制了對(duì)視圖的修改和刪除,它并不限制原始表的修改和刪除。在視圖的底層仍然是使用了基本表的列,而基本表的列仍然可以被修改和刪除。因此,如果需要更改原始表的列,那么必須關(guān)閉視圖所謂的 SELECT 權(quán)限。
以上便是介紹 ORACLE 數(shù)據(jù)庫(kù)中只讀視圖的相關(guān)知識(shí),希望讀者能夠在實(shí)際開(kāi)發(fā)中熟練應(yīng)用這些知識(shí)。