개발정리

[오라클] 수정 가능한 조인 뷰 본문

CS/SQL

[오라클] 수정 가능한 조인 뷰

coffee. 2025. 10. 11. 17:17

전통적인 방식의 조인 뷰

UPDATE 고객
SET (최종거래일시,최근거래금액) = (SELECT max(거래일시),sum(거래금액)
								  FROM  거래
                              	  WHERE 고객번호 = 고객.고객번호
                                  AND 거래일시 >= TRUNC(ADD_MONTHS(SYSDATE,-1)))
WHERE EXISTS ( SELECT 'X'
			   FROM 거래
               WHERE 고객번호 = 고객.고객번호
               AND 거래일시 >= TRUNC(ADD_MONTHS(SYSDATE,-1)))

- UPDATE를 위해 테이블을 2번 엑세스 해야하는 문제 발생

- 서브쿼리에 unnest와 함께 hash_sj 힌트를 사용하면 효과적이지만 테이블을 두번 엑세스하는 비효율 존재

 

수정 가능한 조인 뷰

수정 가능한 뷰는 INSERT, UPDATE, DELETE와 같은 DML(Data Manipulation Language) 작업을 뷰를 통해 실행할 수 있는 뷰입니다. 기본적으로 뷰는 데이터를 수정할 수 없습니다. 그러나 특정 조건을 만족하면, 조인 뷰도 수정이 가능합니다.

 

 

UPDATE 
	(select c.최종거래일시,c.최근거래금액,t.거래일시,t.거래금액
    from (select 고객번호,max(거래일시) 거래일시, sum(거래금액) 거래금액
          from 거래
          where 거래일시 >= trunc(add_months(sysdate,-1))
          group by 고객번호) t
          , 고객 c
    where c.고객번호 = t.고객번호)
 set 최종거래일시 = 거래일시
     ,최근거래금액 = 거래금액

 

 

다만 한가지 제약이 존재

- 키-보존 테이블 에만 입력,수정,삭제가 허용

 

 

키-보존 테이블

조인된 결과 집합을 통해서도 중복 없이 Unique하게 식별이 가능한 테이블

-> 1:M 테이블에서 M쪽 테이블

-> 즉, 외래키를 가지고 있는 테이블을 의미

 

 

 

참조

SQL전문가 가이드

'CS > SQL' 카테고리의 다른 글

[오라클] HWM(High Water Mark)  (0) 2025.10.12
[오라클] dual테이블에 대해서  (0) 2025.04.16
오라클 PL/SQL 알아보기  (0) 2025.04.13
오라클 paraller 문  (0) 2025.03.05
SELECT FOR UPDATE문  (0) 2025.03.04