특정 테이블의 정보를 특정 데이터로 업데이트 해달라는 요청이 가끔 들어온다.

물론 그 데이터는 엑셀로 올것이고, 현재 DB데이터와 1:1 맵핑되는 상황이 아닐것이죠.

그래서 1번의 방법과 같이  임시 테이블에 넣은다음에 쿼리를 돌리겠죠.


하지만 1번과 같이 하게되면 set 절이 반복적으로 Random 액세스를 해서 부담이 발생한다는군요.

뭐 지금까지 요청받은 부분에서 부담요소가 있었던것은 아니지만 , 동료분이 2번과 같은 Oracle 문법을 사용하길래 메모해본다.


우선적으로 위와 같은 성능을 해결하기위해서 "Updatable Join View" 방식을 사용한다고 합니다.

그런데 이 방법은 제약조건이 존재하는데 꼭 UK 또는 PK 설정이 되어 있어야 한다고합니다.

하지만 그렇지 않은 경우도 있을 수 있죠.

그래서 사용하는것이 BYPASS_UJVC 힌트절이라고 합니다.


머 자세한건 잘 모릅니다.

동료분이 사용하길래 메모해둠!!!


-- 1번
update test_a1 a 
set b = (
    select b
    from test_b1
    where a = a.a
)
where exists (select 1 from test_b1 where a = a.a);

-- 2번
update /*+ BYPASS_UJVC */
(
    select a.b a_b, b.b b_b
    from test_a1 a, test_b1 b
    where a.a = b.a
)
set a_b = b_b;

/*  
drop table test_a1;
drop table test_b1;
create table test_a1
(
    a number,
    b varchar2(10)
);
create table test_b1
(
    a number,
    b varchar2(10)
);
insert into test_a1 values(1, 'a1');
insert into test_a1 values(2, 'a2');
insert into test_b1 values(2, 'a2222');
*/


+ Recent posts