ORA 01779 질문드립니다. 0 5 6,516

by CVS [SQL Query] ORA-01779 Error ORACLE merge [2019.03.19 16:07:25]


안녕하세요

데이터 업데이트쿼리의 에러때문에 질문드립니다.

지금 작성한 쿼리는 다음과같습니다.

update
(select a.no , a.st, a.dt, ,a.cdt from tb a, tb b , tb c
where
1=1
and a,no = b.no(+)
and a.no = c.no(+)
and a.st='55'
and a,cdt is not null
and c.no is null
and a.no like 'shop%'
)
set st='82';

여기서 a와 c에 st컬럼이 둘다 존재하여 발생하는것같은데 해결이 되질않습니다...

by 우리집아찌 [2019.03.19 16:17:36]

오라클에서는 update 타켓테이블은 inline view 로 처리할수 없습니다.

subquery 로 작성하시거나

merge into 문으로 수정하시면됩니다.


by 마농 [2019.03.19 16:58:48]

뷰 업데이트가 아예 불가능한 것은 아니고
몇가지 제약사항을 만족한다면 뷰 업데이트도 가능합니다.
http://gurubee.net/article/79308
위의 경우엔 b 를 왜 조인하는지 이유를 모르겠고?  --> 조인 제거 필요
a 와 c 와의 관계가 1:1 또는 다:1 이면 업데이트 가능합니다.
조인 키인 c.no 에 PK 가 설정되어 있어야 합니다.

그런데?? 다시 보니 쿼리가 이상하네요? a, b, c 가 같은 테이블인가요?


by 우리집아찌 [2019.03.20 10:09:26]

오.. BYPASS_UJVC 힌트 없이도 가능은 하는군요..


by CVS [2019.03.19 17:15:34]
merge into tb a
using
 (select
  a.no
 ,a.st
 ,a.dt
 ,a.ct
 from
  tb a , tb  b , tb c
 where
  1=1
  and a,no = b.no(+)
  and a.no = c.no(+)
  and a.st='55'
  and a,cdt is not null
  and c.no is null 
  and b.no is not null
  and a.no like 'shop%') b
on
 (a.no = b.no)
when matched then
update set st='82';

이렇게 해결했습니다.

우리집 아찌님 ,마농님 답변 감사드립니다.

중간에 b조건을 뺴먹어서 마농님께 혼란을 드린것같네요

a b c 각기 다른테이블이었습니다.

 


by 마농 [2019.03.19 17:34:52]

조건 빼지 마시고
테이블명 정확하게 해주세요. tb1, tb2, tb3
질문이 완전 다른 질문이 되어 버립니다.

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