如果你需要改變或者更新一個視圖(view)或者維護當前的存儲過程或者觸發器
我建議你使用ALTER VIEW
盡管停止視圖並重新建立視圖是一個誘人的想法
但這樣做有可能會刪除視圖上的全部許可(permission)
存儲過程和觸發器
ALTER VIEW的語法幾乎與CREATE VIEW完全相同
而且像CREATE VIEW那樣
你可以通過添加WITH ENCRYPTION和(或者)WITH SCHEMABINGDING來改變一個視圖
但是
使用ALTER VIEW還是有幾個需要注意的地方
如果你的視圖訪問新的對象
那麼該視圖的許可必須和新對象的許可一樣
否則視圖不能成功訪問新對象
此外
修改視圖的用戶必須擁有與該視圖有關的表格
視圖
表格值函數的ALTER VIEW和SELECT許可以及對該視圖調用的標量函數(scalar
valued function)的EXECUTE許可
你還需要牢記一點
如果你最初用WITH ENCRYPTION或者CHECK OPTION創建的視圖
你必須在ALTER VIEW語句後面再次包含這些參數
也就是說
如果你修改了視圖
那麼你必須重新設置WITH ENCRYPTION和CHECK OPTION
這些參數不會自動保留下來
在下面的例子中
我將創建一個簡單的視圖並運行它
然後
我將修改它
確認它的結果
並用sp_helptext來查看視圖文本中改變的地方
首先
我將建立一個簡單的視圖
它將調出authors表格中所有加利福尼亞州作者的名
姓以及所在城市
CREATE VIEW vwCalAuthors
AS
Select au_fname
au_lname
city
FROM authors
where state =
CA
With CHECK OPTION
GO
讓我們看看這個視圖工作的情況如何
SELECT * FROM vwCalAuthors
au_fname au_lname city
Johnson White Menlo Park
Marjorie Green Oakland
Cheryl Carson Berkeley
Heather McBadden Vacaville
(
row(s) affected)
現在
我決定讓這個視圖只反映加尼弗尼亞州奧克蘭市的作者情況
ALTER VIEW vwCalAuthors
AS
Select au_fname
au_lname
city
FROM authors
WHERE state =
CA
and city =
Oakland
GO
讓我們運行這個result set來得到奧克蘭市的作者信息
au_fname au_lname city
Marjorie Green Oakland
Dean Straight Oakland
Dirk Stringer Oakland
Stearns MacFeather Oakland
Livia Karsen Oakland
(
row(s) affected)
最後
如果相對於運行result set
你更情願調用改變後的視圖文本
你可以用sp_helptext系統存儲過程來查看隱藏在視圖後面的文本
(記住
ALTER VIEW改變了視圖最初創建時在第一位置所使用的CREATE VIEW語句
因此在你的結果中你應該看到的語句
)
注意
想一想我們還遺漏了什麼
我們在修改視圖時沒有包括CHECK OPTION
現在它已經沒有了
在每次修改視圖時
我們都必須手工重置CHECK OPTION和WITH ENCRYTION
Sp_helptextvwCalAuthors
Text
CREATE VIEW vwCalAuthors
AS Select au_fname
au_lname
city
FROM authors
WHERE state =
CA
and city =
Oakland
From:http://tw.wingwit.com/Article/program/Oracle/201311/17204.html