오라클] select 후 update를 하고싶습니다.. 1 8 4,576

by 디비초보 [Oracle 기초] select update [2019.02.27 13:36:25]


안녕하세요 쿼리가.. 가능할꺼같은데 안되고 있어서 질문드려요~

A, B 두개의 테이블이 있습니다.

A테이블에서 select 후 B테이블에 update를 하고싶습니다!!

양쪽 테이블에는 여러건의 데이터가 있습니다. 1명의 사람에 대해서만 select후 update를 하려고합니다.

 

구상중인 쿼리는

UPDATE /*+ bypass_ujvc */

(

select b.컬럼1, b.컬림2, b.컬럼3

from 업데이트해야할 테이블 a, 검색하는 테이블 b

where b.code = '02'

and b.seq = '1122'

and a.code = b.code

and a.b_code = b.b_code

)

zip = 컬럼1

, zip_1 = 컬럼2

, zip_2 = 컬럼3

;

 

위와 같이 쿼리를 날려보니

ORA-01733 가상열은 사용할 수 없습니다. 라는 에러가 나왔습니다.

컬럼은 양쪽 테이블 있는것을 확인했습니다~

위와 같이 쿼리를 날리면 안되는걸까요?

by 마농 [2019.02.27 13:46:13]

1. 인라인뷰 select 절에 zip, zip_1, zip_2 가 있어야죠.
2. 가상열 에러가 난걸 보면 쿼리가 위와 같이 단순하지 않을 것으로 예상됩니다.
3. bypass_ujvc 힌트는 11G 부터는 유효하지 않습니다.
4. 조인 업데이트 참조 : http://gurubee.net/article/79308


by 디비초보 [2019.02.27 13:58:45]

안녕하세요 마농님

11G에서는 힌트가 불가능하다면.. 혹시 다른 select update 쿼리를 날리는 방법이 있을까요?

서브쿼리만을 사용해야 하는건가요?


by 마농 [2019.02.27 14:11:16]

힌트가 불가능 한거지, 조인 업데이트 자체가 불가능 한 것은 아닙니다.
참조 URL 눌러 보세요.


by 디비초보 [2019.02.27 14:15:38]

넵넵 말씀주신 부분은 2번 부분에 힌트를 제거하고 조인문으로 해보라는 말씀이신건가요~?

잘이해가 안가서 url보고 3번 머지문을 이용해 볼까 합니다~ 도전해보겠습니당~


by 삐르짱 [2019.02.27 14:04:57]

오라클 MERGE문을 활용해도 되지 않을까요?


by 디비초보 [2019.02.27 14:11:24]

아 오라클 초보자라.. 머지문이 있는지도 몰랐네요 ㅎㅎ

 

한번 찾아서 시도해보겠습니다~


by 마농 [2019.02.27 14:32:58]

몇가지 제약사항만 지켜준다면 2번 조인 업데이트 방법도 가능합니다.
 - 뷰에 복잡한 가공(Group By, Order By, 분석함수 등등)이 없어야 하고,
 - 참조 대상 테이블을 PK 로 조인해야만 합니다.
제약 사항이 지켜지지 않는다면?
 - 1,3번 방법 사용하셔야죠.


by 디비초보 [2019.02.27 14:56:38]

아 그렇군요!! 

3번 방법으로 해결했습니다~ 감사합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입