VIEW 관련 문의 드립니다 0 11 3,249

by 사랑초 view [2014.03.12 14:44:00]


안녕하세요...
VIEW 관련 문의를 드리고자 이렇게 질문글을 올립니다...
 
VIEW 를 아래와 같이 생성하고...
CREATE OR REPLACE FORCE VIEW TMP_TESTING AS
SELECT * FROM TESTING;

INSERT INTO TMP_TESTING(human)
VALUES('홍길동');
COMMIT;
--1 row created.
--Commit complete.

VIEW를 통해서 INSERT, UPDATE, DELETE 가 잘~ 됩니다...

음... WITH CHECK OPTION 을 따로 주지도 않았고...
이게 정상이 아닌 것 같아 보이는데.... 제가 잘못 알고 있는걸까요?


답변 부탁드립니다...
by 부쉬맨 [2014.03.12 14:55:42]
뷰를 는 DML이 안되죠
대상테이블을 수정 및 추가를 ..

by DarkBee [2014.03.12 14:58:58]
뷰도 DML 이 됩니다. 제약조건이 있어서 그렇지 : )

by 아발란체 [2014.03.12 15:00:35]
다음과 같이 뷰 생성 시 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() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입