2013-03-08 103 views
0

我有一個關於意見的問題。在堅果殼中,我必須通過視圖更新字段。是否可以更新簡單視圖?

A)創建一個視圖,顯示每輛車的所有汽車領域和選項數據。確保所有的汽車都會出現。

create view carview as 
select c.serial, c.cname, c.make, c.model, c.cyear, c.color, c.trim, 
c.enginetype, c.purchinv, c.purchdate, c.purchfrom, c.purchcost, c.freightcost, 
c.listprice, o.ocode, o.odesc, o.ocost, o.olist 
from car c 
join baseoption b 
on c.serial = b.serial 
join options o 
on b.ocode = o.ocode 

B)讓用戶C訪問視圖,然後爲視圖分配權限給用戶C,讓用戶測試視圖。僅查詢一些字段。更新一輛汽車的年份並在您的提交中包含回覆。

GRANT ALL ON carview TO C; 

用戶C可以訪問視圖,並做了選擇就可以了,但我不知道如何更新與用戶C的觀點(如果這甚至有可能)

+0

我要和你「簡單視圖」的定義狡辯這裏。在我的書中,一個簡單的視圖就是一張表的視圖。一旦我們介紹選擇或聚合,事情並不簡單。 – APC 2013-03-08 21:07:02

+0

您的看法可能[內在可更新](http://docs.oracle.com/cd/E11882_01/server.112/e26088/statements_8004.htm#SQLRF54782)。嘗試'更新carview設置cyear = 2000;',會發生什麼?檢查'USER_UPDATABLE_COLUMNS',並檢查所有的表定義,看看它爲什麼是不可能的。您可能希望使用「左連接」來包含所有車輛。你應該接受你之前的問題的一些答案。 – 2013-03-08 21:22:20

回答

2

個人我不喜歡更新意見,但他們是可能的。您實現一個不是在視圖OF觸發器:

http://psoug.org/reference/instead_of_trigger.html

而且你可以把它調整到只允許特定類型的更新等:

CREATE OR REPLACE <TRIGGER NAME> 
INSTEAD OF UPDATE 
ON <VIEW> 
FOR EACH ROW 
BEGIN 
    <UPDATE STATEMENT>; 
END <TRIGGER NAME>; 
/
相關問題