카테고리 없음

09 _OracleDB SQL : VIEW(작성방법, 옵션)_데이터 딕셔너리

pupu91 2022. 7. 20. 11:56
반응형

 

데이터 딕셔너리(Data Dictionary)

  • 자원을 효율적으로 관리하기 위해 다양한 정보를 저장하는 시스템 테이블
  • 사용자가 테이블을 생성하거나, 사용자를 변경하는 등의 작업을 할 때 데이터베이스 서버에 의해 자동으로 갱신되는 테이블로 사용자는 데이터 딕셔너리 내용을 직접 수정하거나 삭제할 수 없다.
  • 원본 테이블을 커스터마이징해서 보여주는 원본 테이블의 가상 테이블 객체(VIEW)이다.

 

DBA_XXX

데이터베이스 관리자만 접근이 가능한 객체 등의 정보 조회
 

ALL_XXX 

자신의 계정 + 권한을 부여받은 객체의 정보 조회

 

USER_XXX

자신의 계정이 소유한 객체 등에 관한 정보 조회

 

 

 


 

VIEW

 

SELECT 쿼리문을 저장한 객체

실질적인 데이터를 저장하고 있지 않는 논리적인테이블

물리적인 테이블을 사용하는 것과 동일하게 사용 가능

 

 


 

1 . VIEW를 사용하는 이유

  • 복잡한 SELECT문을 재작성할 필요가 없음
  • 민감한 데이터를 숨길 수 있음

 

 

 

2 . VIEW 객체 생성 권한 부여

  • 만들어 놓은 계정에 뷰 객체 생성 권환이 부여되어 있지 않을때 시스템 계정으로 변환하여 뷰 객체 생성 권한을 부여한 후 작업할 수 있다.
시스템 계정으로 접속 후
GRANT CREATE VIEW TO C##EMPLOYEE; 
TO 뒤에는 접속 할 계정 아이디 입력

 

 

 

3.  VIEW 작성 방법

  • CREATE [OR REPLACE] VIEW 뷰이름 AS 서브쿼리;
  • OR REPLACE 는 옵션. 똑같은 뷰의 이름이 있더라고 교체해 줌
VIEW 생성
CREATE OR REPLACE VIEW V_RESULT_EMP
AS
SELECT
       EMP_ID
     , EMP_NAME
     , JOB_NAME
     , DEPT_TITLE
     , LOCAL_NAME
  FROM EMPLOYEE E

VIEW 사용
SELECT
       V.*
  FROM V_RESULT_EMP V
 WHERE V.EMP_ID = '205';

 

 

 

4.  DML 명령어로 VIEW 조작이 불가능한 경우

  • 뷰 정의에 포함되지 않은 컬럼을 조작하는 경우
  • 뷰에 포함되지 않은 컬럼 중에, 베이스가 되는 테이블 컬럼이 NOT NULL 제약조건이 지정 된 경우
  • 산술 표현식으로 정의 된 경우(DELETE의 조건으로는 사용 가능)
  • JOIN을 이용해 여러 테이블을 연결한 경우
  •  DISTINCT를 포함한 경우
  • 그룹함수나 GROUP BY절을 포함한 경우

 

5 . VIEW 옵션

  • OR REPLACE : 기존에 동일한 뷰 이름이 존재하는 경우 덮어쓰고, 존재하지 않으면 새로 생성하는 옵션
  • NOFORCE : 서브쿼리에 테이블이 존재해야만 뷰를 생성함(기본값)
  • FORCE : 서브쿼리에 사용 된 테이블이 존재하지 않아도 뷰 생성
CREATE FORCE VIEW V_EMP
AS
SELECT TCODE
     , TNAME
     , TCONTENT
  FROM TT; <- 존재하지 않은 테이블

 

 

 

  • WITH CHECK OPTION : 조건절에 사용 된 컬럼의 값을 수정하지 못하게 함
CREATE OR REPLACE VIEW V_EMP2
AS
SELECT
       E.*
  FROM EMPLOYEE E
 WHERE MANAGER_ID = '200'
  WITH CHECK OPTION;
  
-- 뷰의 WITH CHECK OPTION의 조건에 위배 됩니다.
UPDATE
       V_EMP2
   SET MANAGER_ID = '900'
 WHERE MANAGER_ID = '200';

 

 

 

  • WITH READ ONLY : DML 수행이 불가능하게 함.
CREATE OR REPLACE VIEW V_DEPT
AS
SELECT 
       D.*
  FROM DEPARTMENT D
  WITH READ ONLY;
  
-- 읽기 전용 뷰에서는 DML 작업을 수행할 수 없습니다.
DELETE
  FROM V_DEPT;
반응형