CAFE

[DB]강좌게시판

Oracle Join Update Syntax..(오라클 조인 업데이트 문)

작성자보노보노|작성시간15.05.06|조회수1,004 목록 댓글 0

Sql server 에서 다량의 데이터를 어떤 테이블로 부터 참조 해서 업데이트를 할때

Join Update 구문을 많이 사용한다..

 

그 문법은 아래와 같다.

 

Update A_TableName Set Column = B.Column

From A_TableName as A Inner join

        B_TableName as B ON A.keyColumn = B.keyColumn

Where A.Column <> B.Column

 

오라클에서도 위와 비슷한 방법으로 업데이트가 가능하다고 한다..

(그렇지만..본인이 테스트를 했을때는 되지 않았다..)

오라클에서 권장하는 문법은 다음 과 같다..

 

UPDATE  /*+bypass_ujvc*/

(

SELECT A.Column, B.RefColumn

FROM ATable A,

BTable B

WHERE A.keyColumn = B.keyColumn

)

SET Column = RefColumn

 

위 구문을 보면 inner join을 한 다음, 수정할 필드와 대상 필드를 조회하고, 그 데이터를 가져와서

바로 업데이트를 한다..

한가지 짚고 넘어가야 할 부분이 있다..

/*+bypass_ujvc*/      <-- 이 부분이다..

맨 처음엔 이 부분을 왜 주석처리를 해놨을까 하고 생각하고

이 부분을 빼고 쿼리를 만들어서 돌렸다..

 

그랬더니 ORA-01779:키-보존된것이 아닌 테이블로 대응한 열을 수정할 수 없습니다.

(ORA-01779 cannot modify a column which maps to a non key-preserved table)

라는 메시지와 함께 에러가 난다.

이 부분은 Constraint를 피해서 Join Update를 할수 있도록 해주는 구문(힌트)이다.

 

Join Update 라 함은 1:1 혹은 1:M 로 묶인 상태에서 왼편..즉 M쪽 집합이어야 하는데..

1쪽 집합의 조인하는 컬럼이 UK혹은 PK로 설정되어 있어야 한다..

만약 그런 상황이라면 /*+bypass_ujvc*/ 구문은 없어도 쿼리가 동작한다..

하지만..대부분의 경우 여러개의 테이블을 조인하거나 엑셀등의 데이터를

data import 해서 만들어진 테이블들과 조인을 하는 경우가 많기에 UK 혹은 PK로 설정하고

업데이트를 실행하기가 쉽지 않다..

그럴때 '오라클에서 잘못되어도 책임지지 않음' 이라는 의미로 쓰는 힌트이다..

 

Hope this helps..

 

다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
맨위로

카페 검색

카페 검색어 입력폼