티스토리 뷰
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을 추가 했을 경우에는 부서가 인사부, 총무부인 직원들만 입력가능 하다.
-.두개 이상의 테이블이나 뷰로부터 데이터를 선택하는 조인 뷰의 제약사항
③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 |