2013-03-08 3 views
0

의견과 관련하여 질문이 있습니다. 너트 껍질에서 나는보기를 통해 필드를 업데이트해야합니다.간단한보기를 업데이트 할 수 있습니까?

가) 각 자동차의 모든 자동차 필드와 옵션 데이터를 보여주는보기를 만듭니다. 모든 차량이 나타나는지 확인하십시오.

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는보기에 액세스하고 그 위에 선택을 할,하지만 난 (그 경우에도 가능하면)

+0

나는 "간단보기"의 당신의 정의와 애매한 것 :

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

그리고 당신은 단지 그것을 조정할 수 있습니다 업데이트 등의 특정 유형을 허용 : 대신보기에 트리거의 구현 이리. 내 책에서 간단한보기는 하나의 테이블에 대한보기입니다. 선택이나 집계를 소개하면 간단하지 않습니다. – 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

는 개인적으로 내가 갱신 싫어하는 사용자 C.와보기를 업데이트하는 방법을 모른다 할 수 보기가 가능하지만 가능합니다.

CREATE OR REPLACE <TRIGGER NAME> 
INSTEAD OF UPDATE 
ON <VIEW> 
FOR EACH ROW 
BEGIN 
    <UPDATE STATEMENT>; 
END <TRIGGER NAME>; 
/
관련 문제