2013-03-08 3 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 

В) имеют доступ пользователя C вид, а затем назначить разрешения для пользователя с точки зрения C и имеют тестового пользователя вид. Запрос только для некоторых полей. Обновите год автомобиля и укажите ответ в своем представлении.

GRANT ALL ON carview TO C; 

Пользователь C может открыть представление и сделать выбор на нем, но я не знаю, как обновить представление с пользователем C. (если это вообще возможно)

+0

Я бы придраться с определением «простой точки зрения» Вот. В моей книге простой вид представляет собой представление по одной таблице. Когда мы вводим выбор или агрегации, все не так просто. – APC

+0

Ваш взгляд может быть [неотъемлемо обновляемым] (http://docs.oracle.com/cd/E11882_01/server.112/e26088/statements_8004.htm#SQLRF54782). Попробуйте 'update carview set cyear = 2000;', что происходит? Проверьте 'USER_UPDATABLE_COLUMNS', а также проверьте все определения таблиц, чтобы понять, почему это или невозможно. Вы можете использовать «левое соединение» для включения всех автомобилей. И вы должны принять некоторые ответы на свои предыдущие вопросы. –

ответ

2

Лично мне не нравится обновляемым но они возможны. Вы реализуете ВМЕСТО триггера в представлении:

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>; 
/
Смежные вопросы