시스템 카탈로그(데이터 사전) with View 공부
/*
1. 뷰의 개념과 사용하기 => 중요
- 뷰(View)는 한마디로 물리적인 테이블을 근거로 한 논리적인 가상테이블
- 디스크 저장 공간이 할당되지 않는다.
즉, 실질적으로 데이터를 저장하지 않고, 데이터 사전에, 뷰를 정의할 때 기술한 쿼리문만 저장되어 있다.
하지만 사용방법은 테이블에서 파생된 객체 테이블과 유사하기 때문에 가상테이블이라 한다.
뷰의 정의는 USER_VIEWS 데이터 사전을 통해 조회가 가능하다.
2. 동작원리
- 뷰는 데이터를 저장하고 있지 않은 가상테이블이므로 실체가 없다.
뷰가 테이블처럼 사용될 수 있는 이유는, 뷰를 정의할 때 CREATE VIEW 명령어 다음의
AS 절에 기술한 쿼리문장 자체를 데이터딕셔너리에 저장하고 있다가 이를 실행하기 때문이다.
SELECT문의 FROM 절에서 v-emp로 기술하여 정의하면, 오라클 서버는 USER_VIEWS에서 뷰이름(v-emp)를 찾는다.
기술했던 서브쿼리문장이 저장된 text값을 view 즉 v_emp 위치로 가져와서 실행한다.
3. 뷰를 사용하는 이유
- 보안과 사용의 편의성 때문
- 보안 : 권한별로 접근이 제한되어서 동일한 테이블에 접근하는 사람마다 다른 뷰에 접근할 수 있도록 한다.
4. 권한 부여
-- 권한 부여 방법(System에서 부여) : grant create view to scott_126;
만약 권한을 부여하지 않으면 insufficient privileges => create view 권한 없음 => 권한 부여하면 됨
-- View 생성시 자동으로 user_views 데이터사전에 자동등록된다.
--> 부서별, 계정별, 접근성 나누어 팀별 나누어져 있다.
-- View 이름은 user_views 데이터사전의 view_name에 저장
-- SQL문은 user_views 데이터사전의 text에 저장
*/
-- scott_05 계정에서 실행
-- view 생성
시스템 카탈로그라고도 함
-> 데이터 사전
SELECT VIEW_NAME, TEXT
FROM USER_VIEWS;

뷰 생성하게됨
카탈로그(데이터 사전)
-VIEWS 정보....
SELECT * FROM USER_VIEWS :
--CONSTRAINTS(제약조건) 정보
SELECT * FROM USER_CONSTRAINTS :
-- 테이블 조회
SELECT *
FROM USER_TABLES;
-- 특정 유저 정보 조회
SELECT *
FROM DBA_USERS
WHERE USERNAME='HR';
-- 제약조건 확인하는 법
SELECT CONSTRAINT_NAME
, CONSTRAINT_TYPE
, TABLE_NAME
FROM USER_CONSTRAINTS
WHERE TABLE_NAME IN('CUSTOMER','ORDERS2','EMP_IDX_TBL');

계정이 같을 경우 같은 제약조건 이름이 같으면 안됨..
CREATE OR REPLACE VIEW v_emp_readonly
AS
SELECT *
FROM CUSTOMER
WITH READ ONLY;
으로 하면....제약조건으로 INSERT가 되지 않음(밑에서도 설명)
--------------------------------------------------------------------------
CREATE OR REPLACE VIEW TEST_V
AS
SELECT CUSTID
, NAME
FROM CUSTOMER
WHERE CUSTID IN(6, 7, 8)
WITH CHECK OPTION;
SELECT * FROM TEST_V
INSERT INTO TEST_V (CUSTID, NAME) VALUES (6, '김국진');
INSERT INTO TEST_V (CUSTID, NAME) VALUES (7, '강호동');
INSERT INTO TEST_V (CUSTID, NAME) VALUES (8, '김서렁');
SELECT * FROM CUSTOMER;
가상으로 만든 VIEW와 기존테이블은 연동되어 있다.
WITH READ ONLY 에서는 INSERT, UPDATE 등 제약조건으로 안된다.

---------------------------------------------------------
-- [ WITH CHECK OPTION ]
-- view 입력,수정,삭제시 실제 테이블이 반영됨, view는 조회결과이므로 반영됨
-- 1) email 컬럼을 추가해서 view 생성 : WITH CHECK OPTION
-- 2) 111,112,113 insert(update는 차후에 하고, email 컬럼 insert 제외) => 조회 조건에 3건만 제약조건
-- 3) email update
-- 4) delete
-- 1) email 컬럼을 추가해서 view 생성 : WITH CHECK OPTION