[오라클(oracle)] join update 힌트로 해결
안녕하세요.
테이블 2개를 사용하여 데이터를 update 할 경우가 많죠.
저는 예전에 postgre에서 사용하던게 머리에 남아서....
무심코 오라클에서 join update를 사용하였더니 에러가 나더라고요.
에러 내용입니다.
SQL 오류: ORA-01779: cannot modify a column which maps to a non key-preserved table
01779. 00000 - "cannot modify a column which maps to a non key-preserved table"
*Cause: An attempt was made to insert or update columns of a join view which
map to a non-key-preserved table.
*Action: Modify the underlying base tables directly.
왜 안되는지는 모르겠으나
힌트를 사용하여 해결하였습니다.
실제 사용쿼리
update /*+bypass_ujvc +*/
(
select
a.chg_dt
from tb01 a, tb02 b
where
b.chg_dt >= 20200225
and a.cl01 = b.cl01
and a.cl02 = b.cl02
) set col3 = null
;
위의 쿼리를 보시면
일반적인 update table set의 형태에서
table 부분에 join 쿼리가 들어가있는 형태 입니다.
그리고 update 옆에 /*+bypass_ujvc +*/ 의 힌트를 사용하였습니다.
참고하시면 좋을것 같네요.
모두 고생하세요.