可以更新简单的视图吗?

时间:2013-03-08 20:14:58

标签: oracle oracle11g database-administration

我对观点有疑问。在坚果壳中,我必须通过视图更新字段。

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更新视图。(如果可能的话)

1 个答案:

答案 0 :(得分:2)

我个人不喜欢可更新的视图,但它们是可能的。您在视图上实现INSTEAD 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>;
/