오라클 DB 다중 UPDATE 문의 드립니다.
오라클 DB 다중 UPDATE 문의 드립니다.
현재 하고싶은 Query 는 아래와 같습니다.
UPDATE TABLE_A
SET
(A,B,C,D) = (SELECT A,B,C,D FROM TABLE_B WHERE PK IN(SELECT PK FROM TABLE_C))
WHERE TABLE_A.PK IN(SELECT PK FROM TABLE_C )
결국 TABLE_A 의 A,B,C,D 칼럼을 서브쿼리 질의한 TABLE_B 의 내용으로 UPDATE 하고싶은것인데요.
서브쿼리한 내용이 1 Row 가 아니다 보니까
"ORA-01427: 단일 행 하위 질의에 2개 이상의 행이 리턴되었습니다." 에러와 함께 UPDATE 가 되지 않습니다.
서브쿼리를 1개 Row 만 반환되도록 하고 조건문에 따라서 여러번 반복하는 방법도 있겠습니다만...
이러한 꼼수말고 정석으로 저러한 경우 다중 옵션의 UPDATE 문을 하는 방법이 궁금합니다.
UPDATE TABLE1 a
SET a.aValue = (SELECT aValue FROM TABLE2 b WHERE a.Condition = b.Condition and rownum = 1)
WHERE EXISTS (SELECT * FROM TABLE2 b WHERE a.Condition = b.Condition)
* rownum = 1 을 넣는 것은 가끔 subquery 의 반환 rows 가 1 임에도 불구하고,
oracle sql parser 가 1 이상으로 판단해서 쿼리 수행을 안하는 경우가 발생하기 때문에
쿼리가 수행되도록 하기 위해서 강제수단으로 기입합니다.