DATOR


updatabla join view SQL가이드


1. 처리 범위가 넓은 update문의 경우 updatable join view를 활용

 : join된 view가 update

 

2. 키 보존 테이블(key-preserved table)만 insert, update가능 (즉 1:M관계에서 M 업데이트만 가능)

UPDATE해야 하는 ROW가 많을 경우 WHERE절이나 SET절에서 테이블을 반복적으로 RANDOM 액세스 해야 하는 부담이 발생하므로 처리 범위가 넓은 UPDATE문의 경우 성능을 위하여 UPDATABLE JOIN VIEW를 활용.

 

updatable join view_01.png

 

 : 조인되는 2개의 테이블은 반드시 1:1 또는 1:M의 관계 update되는 컬럼의 테이블은 M쪽 집합이어야 하며, 1쪽 집합인 Parant table의 조인컬럼이 UK 혹은 PK로 설정되어야 함을 의미한다.

조건 만족하지 못하면 ORA-01779에러 발생

즉, 조인뷰는 키보존 테이블(Key-preserved table)만 insert, update가능

  : 키 보존 테이블이 아닌 테이블 업데이트 시 "ORA-01779:키-보존된 것이 아닌 테이블로 대응한 열을 수정할 수 없습니다" 와 같은 에러 발생

 

※ Updatable view이지만, 데이터 갱신이 불가한 경우

① union, union all, minus

② distinct

③ 집계함수, 분석함수

④ Group by, Order by, Connect by, Start with 절을 포함

⑤ rowid 또는 rownum이 사용된 경우

 

3. 1:M관계에서 1쪽을 업데이트하려면 뷰를 강제 업데이트해야 함

① /*+bypass_ujvc*/ 사용 : 1:M에서 1쪽 업데이트 시 ORA-01779 에러 발생. /*+ bypass_ujvc */로 에러 해결  

bypass updatable join view Constraints (공식적 힌트가 아님)

updatable join view_02.png

updatable join view 는 부모 테이블의 조인 컬럼이 UK 또는 PK로 설정되어 있어야 한다. 이러한 Constraints를 피해서 1:1관계임을 보장하여 강제 업데이트 (키보존을 생략하여 강제 업데이트 할 수 있게 해주는 힌트)

==> 1:1 관계임을 업데이트 치는 사람이 보장한다는 의미의므로 신중히 처리 해야 한다.

updatable join view_03.png

 ==> /*+bypass_ujvc*/ 가 11g에서는 ORA-01779에러가 발생한다. 자주 BYPASS를 사용하시던 분이시라면... 당혹스러우셨을거라 생각된다. 이에 대한 방안은 다음 글에 정리하기로 하고... 

② 스칼라서브쿼리 사용 : 1:M에서 1쪽 업데이트 시 스칼라서브쿼리 사용하면 가능

 

 

Tag :

Leave Comments