Oracle視圖,oracle視圖建立
Oracle視圖簡單視圖
視圖一個虛擬表,它同真實表一樣包含一系列帶有名稱的列和行資料。
但是視圖並不在資料庫中儲存真實值,資料庫只在資料字典中儲存了視圖定義本身。
使用者可以在視圖中進行INSERT、UPDATE和DELETE操作。通過視圖修改資料時,實際上是在修改基本表中儲存的資料。
視圖可以建立在關係表上,也可以建立在其他視圖上,或者同時建立在兩者之上。建立視圖,主要是為了將一個或者多個表中經常使用到的資料結合帶一起,方便使用者的資料操作。
一個比較簡單的視圖,只能通過它從基本表中檢索資料,而不能通過它修改基本表中的資料。建立視圖最基本的文法如下:
CRAETE [OR REPLACE] VIEW view_nameAS <SELECT 語句>;[WITH CHECK OPTION]
其中,WITH CHECK OPTION選項用來定義一個規範。
例1:
針對student表建立一個視圖:
CREATE OR REPLACE VIEW stu_viewAS SELECT SID,SNAME,SAGE,SSEX FROM student WHERE SSEX='F'
或者
CREATE OR REPLACE VIEW stu_view(編號,姓名,年齡,性別)AS SELECT SID,SNAME,SAGE,SSEX FROM student WHERE SSEX='F'
可以通過資料字典來查看視圖資訊:
SELECT TEXT FROM user_views WHERE view_name=UPPER('stu_view')
其結果如下:
SELECT SID,SNAME,SAGE,SSEX FROM student WHERE SSEX=’F’
可更新視圖
一個視圖能否更新取決於建立該視圖的語句,一般來說,建立的視圖越複雜,其被更新的可能性就越小。
建立如下視圖:
CREATE OR REPLACE VIEW stu_age_view(SID,SNAME,SAGE,SSEX)AS SELECT SID,SNAME,SAGE+1,SSEX FROM student
對其進行更新:
UPDATE stu_age_view SET sname='SIEGE' WHERE sname='SAM'
修改成功。
再對其年齡列變更:
UPDATE stu_age_view SET sage=10 WHERE sname='SIEGE'
此時報ORA-01733錯誤(不允許修改虛擬列)
我們可以根據資料字典查看視圖的那些列可以進行修改:
SELECT column_name,UPDATABLE,insertable,deletable FROMuser_updatable_columns WHERE table_name=UPPER('stu_age_view')
其結果如下:
COLUMN_NAME UPDATABLE INSERTABLE DELETABLE SID YES YES YES SNAME YES YES YES SAGE NO NO NO SSEX YES YES YES
說明姓名列不可以更改。
若指定WITH CHECK OPTION時:
CREATE OR REPLACE VIEW stu_check_view(SID,SNAME,SAGE,SSEX)AS SELECT SID,SNAME,SAGE,SSEX FROM student WHERE sname='SIEGE'WITH CHECK OPTION
此時,若修改視圖:
UPDATE stu_check_view SET sname='kate'
則會出現ORA-01402錯誤(違反WITH CHECK OPTION子句約束)。