시스템 카탈로그(데이터 사전) with View 공부

2025. 6. 24. 16:48자격증/SQLD - 취득완료

 

 

/*
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