데이터베이스

[ORACLE] SQL - 뷰(VIEW)

Seong-Jun 2025. 3. 17. 22:11
728x90
반응형
SMALL

뷰(VIEW)란?

SELECT 문을 통해 얻어진 결과물을 저장해 둘 수 있는 객체이다. 자주 사용되는 쿼리문을 저장해두면 매번 다시 해당 쿼리문을 작성할 필요가 없다. 임시 테이블과 같은 존재라고 생각할 수 있다.

SELECT 문을 통해 얻은 결과를 논리적으로만 저장하는 임시 테이블

 

VIEW 생성 방법

CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW 뷰명
	AS (서브쿼리)
	[WITH CHECK OPTION]
	[WITH READ ONLY]

 

  • OR REPLACE : 기존에 동일한 이름의 뷰가 있을 경우 갱신하고 없을 경우 새로 생성한다.
  • FORCE | NOFORCE
    • FORCE : 서브쿼리에 작성한 테이블이 존재하지 않아도 뷰를 생성
    • NOFORCE(기본값) : 서브쿼리에 작성한 테이블이 존재하는 경우에만 뷰를 생성
  • WITH CHECK OPTION : DML 사용 시 서브쿼리에 작성한 조건에 맞는 값만 실행되도록 하는 옵션
  • WITH READ ONLY : 뷰를 조회만 가능하도록 하는 옵션 (가능하면 추가해주는 것이 안전하다)

뷰 생성 권한 오류 => ORA-01031: 권한이 불충분합니다 01031. 00000 -  "insufficient privileges"

 

하지만 바로 뷰를 생성하게 되면 위와 같은 오류가 발생한다.

뷰 생성 권한 부여

GRANT CREATE VIEW TO 사용자명;

 

관리자 계정으로 접속 후 해당 사용자에게 권한을 부여해야 한다.

 

뷰 컬럼명 지정하기

CREATE VIEW VW_EMP_JOB (사번, 이름, 직급명, 성별, 근무년수)
AS (
	SELECT
		EMP_ID, 
		EMP_NAME, 
		JOB_NAME, 
		DECODE(SUBSTR(EMP_NO, 8, 1), 1, '남', 2, '여'),
		EXTRACT(YEAR FROM  SYSDATE) - EXTRACT(YEAR FROM HIRE_DATE)
	FROM EMPLOYEE
		JOIN JOB USING(JOB_CODE)
);

SELECT * FROM VW_EMP_JOB;

 

위와 같이 컬럼명을 지정하면 지정한 컬럼명대로 출력된다. 지정한 컬럼명으로 작성하여 조건을 줄 수 있고 해당 컬럼을 사용하여 조회가 가능하다. 

 

VIEW를 통해 DML(INSERT, UPDATE, DELETE) 사용하기

뷰는 논리적인 테이블이므로 뷰를 통해서 DML을 작성하게 되면 뷰가 아닌 실제 데이터가 저장되어 있는 테이블에 반영된다.

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

  1. 뷰에 정의되지 않은 컬럼을 조작하려는 경우
  2. 뷰에 정의되어 있지 않고 테이블에 NOT NULL 제약조건이 설정되어 있는 경우
    • 추가 수정할 때 문제가 발생할 수 있다.
  3. 산술연산식 또는 함수식으로 정의되어 있는 경우
  4. DISTINCT 구문이 포함되어 있는 경우
  5. JOIN을 이용하여 여러 테이블을 연결한 경우

=> 뷰는 대부분이 조회 용도로 사용하므로 되도록 DML을 사용하지 않는 것이 좋다.

728x90
반응형
LIST