개발/DB

[오라클(oracle)] join update 힌트로 해결

Mr.mandu. 2020. 3. 4. 14:48

안녕하세요.


테이블 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 +*/ 의 힌트를 사용하였습니다.


참고하시면 좋을것 같네요.

모두 고생하세요.