ORA-01779 키보존 오류나네요. 0 2 34,656

by 풋내기 [SQL Query] bypass_ujvc ORA-01779 [2012.03.05 15:12:30]



update /*+ bypass_ujvc */
( select
    a.gbn as a_a,
    b.gbn as b_b
from main a, step b
where a.id = b.id
and a.time='01'
)
set a_a = b_b


이렇게 쿼리날렸는데도 키보존오류가납니다 해결방법없을까요? ㅠㅠ
by 마농 [2012.03.05 16:41:49]
오라클 버전이 어떻게 되나요?
11G 부터는 사용할 수 없는 힌트인걸로 압니다.
키보존이 안되서 나는 오류를 무시해라 라는 힌트죠.

그럼 키보존이 되도록 하려면?
b.id 가 유니크 하다는 것을 설정해주셔야 합니다.
b 테이블에 id로 PK 나 UK 를 만들면 해결이 되구요.
만약 b.id 가 유일하지 않다면 쿼리 자체가 논리적으로 모순입니다.
말도 안되는 구문이라는 말이죠.

PK 나 UK 설정을 할 수 없는 상황이라면
수정가능조인뷰 방식을 다른 방식으로 바꾸셔야 합니다.
서브쿼리 방식 또는 머지방식...

UPDATE main a
   SET gbn = (SELECT gbn FROM step b WHERE b.id = a.id)
 WHERE a.time = '01'
   AND EXISTS (SELECT 1 FROM step b WHERE b.id = a.id)
;

MERGE INTO main a
USING (SELECT a.id, b.gbn FROM main a, step b WHERE a.id = b.id AND a.time='01') c
ON (a.id = c.id)
WHEN MATCHED THEN
UPDATE SET gbn = c.gbn
;

by 풋내기 [2012.03.05 19:28:59]

와 정말 친절한 답변감사합니다^^
많은 도움이 되었습니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입