티스토리 뷰

database/db

[oracle] 뷰(view)

그루아트 2020. 3. 24. 00:44

1.VIEW 란?

테이블과 매우 흡사한 오브젝트이다.

흡사하다라는 말은 SQL문을 사용할대 테이블처럼 사용할 수 있다는 뜻이다.

SELECT문에서 테이블처럼 FROM 절 뒤에 위치하고 SEELCT 리스트에 뷰에 속한 컬럼을 나열하고 WHERE 절에 조건을 줄 수 있다.

뷰와 테이블의 차이점은 뷰는 실제로 데이터를 저장하고 있지 않다는 점이다.

뷰라는 단어의 의미가 '보다'라는 것을 생각해 보면 실제로 테이블에 저자오딘 데이터를 뷰를 통해서 보는 것이다. 

일종의 가상테이블 이라고도 할 수 있다.,


뷰를 왜 사용할까?

뷰는 어느 특정 사용자에게 보여주기 민감한 컬럼리스트를 제외하고 나머지를 보여줄때 사용한다.

민감한 데이터는 특정 사용자에게만 공개 가능하고 그외 다른 사용자에게는 비공개로 해야 할때 뷰를 사용한다.


뷰를 생성할때 있는 REPLACE 구문은 뷰를 다시 생성하고자 할 경우 해당 뷰를 제거하지 않고 생성 가능하도록 한다.

CREATE [OR REPLACE] 는 "만들거나 혹은 대체하거나" 라는 의미이다.


-.VIEW 권한 부여

-.생성 권한(CREATE)

GRANT CREATE VIEW TO 계정

-.조회 권한(SELECT)

GRANT SELECT ON VIEW_이름 TO 계정

GRANT SELECT, UPDATE, DELETE ON VIEW_이름 TO 계정

-.수정 권한(UPDATE)

GRANT UPDATE ON VIEW_이름 TO 계정


-.뷰 생성

CREATE [OR REPLACE] VIEW 스키마이름.뷰이름

AS

SELECT *

FROM TEST;

-.뷰 삭제

DROP VIEW 스키마이름.뷰이름



2.VIEW의 사용

뷰는 여러 테이블을 조인하는 복잡한 쿼리를 단순히 만들어 사용하는데 상당한 편리함을 제공한다.

오라클 시스템에서는 데이터베이스의 정보를 관리하는 데이터 딕셔너리의 접근을 허용할 경우 오라클 자체에 문제가 발생할 수 있어,

관련 정보를 조회만 할 수 있도록 뷰로 만들어 제공한다.


-.Read-Only 뷰

CREATE [OR REPLACE] VIEW 스키마이름.뷰이름

AS

SELECT *

FROM TEST

WITH CHECK OPTION /*데이터 무결성 제약조건(조회된 데이터의 조건에 맞는 데이터만 입력가능)*/

WITH READ ONLY; /*읽기 전용 옵션*/


-.Updatable 뷰

CREATE [OR REPLACE] VIEW 스키마이름.뷰이름

AS

SELECT *

FROM TEST;


-.뷰를 사용하여 데이터를 갱신 시 제약사항

①UNION, UNION ALL 을 사용한 경우

②DISTINCT를 사용한 경우

③집계및 분석함수를 사용한 경우(SUM, AVG등)

④GROUP BY, ORDER BY, MODEL, CONNECT BY, START WITH절을 포함한 경우

⑤SELECT 리스트에 서브쿼리가 포함된 경우

⑥SELECT 리스트에 의사컬럼을 사용한 경우, 의사컬럼(ROWID, ROWNUM 등)은 UPDATE 할 수 없다.


-.뷰 테이블 내의 CRUD 가능여부를 알수 있는 방법

SELECT *

FROM USER_UPDATABLE_COLUMNS

WHERE TABLE_NAME = 'VIEW명';


-.WITH CHECK OPTION

뷰 생성시 'WITH CHECK OPTION' 구문을 추가하면 뷰를 정의하는 쿼리문의 조건에 어긋난 데이터의 INSERT가 불가능하다.

즉, 테이블 생성 시 컬럼에 사용할 수 있는 CHECK 제약조건과 같은 역할을 한다. 즉 INSERT 시 무결성을 보장한다.

예를 들자면

특정 뷰가 부서가 인사부, 총무부인 직원들만 조회한다고 했을때 WITH CHECK OPTION을 추가하지 않았을 경우에는 영업부, 관리부 등

입력에 문제가 없으면 모두 입력되지만 WITH CHECK OPTION을 추가 했을 경우에는 부서가 인사부, 총무부인 직원들만 입력가능 하다.


-.두개 이상의 테이블이나 뷰로부터 데이터를 선택하는 조인 뷰의 제약사항

①INSERT의 경우 
WITH CHECK OPTION이 사용되면 INSERT, UPDATE는 모두 사용할수 없으며, WITH CHECK OPTION을 사용하지 않고 INSERT 가능 시
컬럼들은 키-보존 테이블의 컬럼이어야 한다.
키-보존 테이블(키가 보존되어지는 테이블???)이란 
뷰를 구성하는 기준 테이블 중 모든 PRIMARY 혹은 UNIQUE키 값이 뷰 자체에서도 UNIQUE한 값을 가진 테이블을 말한다.

즉, JOIN으로 만들어진 SELECT의 리스트로 된 뷰에서 각각의 테이블에 INSERT, UPDATE 작업을 하기 위해서는
SELECT 컬럼 리스트를 구성할때 각 테이블의 PRIMARY 키나 UNIQUE 키가 모두 컬럼 리스트에 들어 있는 테이블만 
INSERT, UPDATE를 사용할 수 있다.
②UPDATE의 경우도 WITH CHECK OPTION을 사용할 수 없으며 모든 UPDATE되는 테이블은 키-보존 테이블의 컬럼이어야 한다.

③DELETE의 경우는 오직 하나의 키-보존 테이블만 있을 경우 삭제가 가능하다.


3.기타 VIEW

①Materialized 뷰

다량의 데이터를 계산하고 요약하는데 사용되는 뷰로써 여러 테이블에 저장된 대용량의 데이터를 목적에 맞게 계산하고 요약하는데 

탁월한 효과를 발휘한다.

일반 뷰와는 달리 쿼리에 의해 계산된 결과를 저장하고 있기 때문이다.

②인라인 뷰

스키마 오브젝트가 아니며 SQL문장에서 사용하는 서브 쿼리의 일종으로, 보통 FROM 절에 위치해서 테이블처럼 사용할 수 있다.


'database > db' 카테고리의 다른 글

[oracle] 시퀀스(Sequence)  (0) 2020.04.04
[oracle] 클러스터/시노님  (0) 2020.03.25
[oracle] 인덱스(INDEX)  (0) 2020.03.20
[oracle] 오라클 오브젝트 CRUD  (0) 2020.03.20
[oracle] 2.데이터 타입(Data Type)  (0) 2020.03.08
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함