다음과 같이 뷰 생성 시 READ ONLY 옵션이나 해당 뷰에 접근 계정 권한이 설정 되어 있지 않다면 수정이 가능합니다.
CREATE VIEW [VIEW_NAME] AS SELECT * FROM [TABLE_NAME] WITH READ ONLY;
또한 READ ONLY 옵션이 없어도 뷰에 사용된 질의에 DISTINCT, UNIQUE, GROUP BY, 집계 함수 등이 있으면 수정이 되지 않습니다.
by 마농
[2014.03.12 15:05:02]
1. 정상입니다. - 테이블을 그대로 조회하는 뷰의 경우 뷰를 통한 입력,수정,삭제가 가능합니다. - 조인 뷰의 경우에도 별다른 가공 없는 1:m 조인이라면 m 의 집합에 대한 갱신이 가능합니다. - 테이블을 가공하여 조회하는 복합뷰의 경우에는 불가능합니다. 2. WITH CHECK OPTION 은 조건절을 체크합니다. - 위 뷰에는 조건절이 없네요.
by 사랑초
[2014.03.12 16:02:20]
음....
테이블을 가공하여 조회하는 복합뷰의 경우에는 불가하다고 하셨는데...
WITH CHECK OPTION 도 없고, VIEW의 특정필드(계산서식이 들어가 있는)만 dml 이 안먹힐뿐
나머지 VIEW 필드들은 DML 이 되는데요...ㅠ
지금 보여드릴수 없는 실제 뷰는...where 절만 없다뿐이지... 펑션, decode, 등이 다 있는데도... DML이 되서요....
CREATE TABLE VIEW_TEST_TBL
(
A NUMBER,
B NUMBER
);
INSERT INTO VIEW_TEST_TBL VALUES(10, 20);
INSERT INTO VIEW_TEST_TBL VALUES(20, 40);
INSERT INTO VIEW_TEST_TBL VALUES(30, 50);
COMMIT;
CREATE OR REPLACE VIEW V_VIEW_TEST_TBL AS
SELECT A, B, A+B*2 AS C FROM VIEW_TEST_TBL;
INSERT INTO V_VIEW_TEST_TBL(A, B) VALUES(10, 20);
COMMIT;
SELECT * FROM V_VIEW_TEST_TBL
--DROP TABLE VIEW_TEST_TBL;
--DROP VIEW TMP_DATATEST_v;
by 마농
[2014.03.12 16:06:39]
용어 사용이 좀 문제가 있긴 하지만... 제가 말한 가공은 그런 단순한 계산식이나 함수사용을 말하는게 아니구요... 위에 아발란체님이 말한 그런거(Group By, Distinct, Union, Rownum 등등)를 의미해요. 전문용어로 하면 "키보전"이라고 하나요? 테이블의 ROWID 가 그대로 유지되느냐, 그렇지 않느냐로 갱신 가능한지 안가능한지가 판별됩니다.
by 사랑초
[2014.03.12 17:08:23]
아하! 이제 이해되었습니다~ 감사합니다!!
by 부쉬맨
[2014.03.12 15:10:50]
예전에 안된거같은데 되는군요... 좋은정보감사... 9i이후로 정체중...ㅠㅠ
by 마농
[2014.03.12 15:32:25]
예전부터 그랬을 껄~
by 부쉬맨
[2014.03.12 15:48:46]
허걱!! 그렇군요 ㅠㅠ
by 사랑초
[2014.03.12 16:02:06]
많은 관심 감사합니다...ㅠ_ㅠ
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.