UPDATE GRA_PIP_M
SET SITENMCD = (
SELECT ENTERPRISECODE
FROM GRA_ENTERPRISE_M
WHERE ENTERPRISENM = (SELECT SITENM FROM GRA_PIP_M WHERE PIPNO = 'P240219000000016')
)
WHERE PIPNO = 'P240219000000016'
코드 블럭에 있는 update문을 보면 SET 절에 있는 SITENMCD 를 하위 쿼리를 통해 갱신하려고 했다.
그럴 경우에는 하위 쿼리를 통해 나와야 하는 결과는 하나여야 문제가 없는데, 이 에러가 발생한 이유는 하위 쿼리를 통한 결과가 2개 이상이였기 때문이다.
나와 같은 경우, GRA_PIP_M 이란 테이블에 있는 특정 PIPNO에 해당하는 SITENM 과 동일한 ENTERPRISNM을 갖고 있는 ENTERPRISECODE가 GRA_ENTERPRISE_M 에 여러개 있었다.
따라서, 동일한 ENTERPRISNM을 갖고 있는 ENTERPRISECODE 목록 중 1개를 제외하고 나머지를 모두 Delete 하거나 / ENTERPRISECODE 마다 ENTERPRISNM 가 다르도록 수정했다.
update를 하려고 하는 특정 컬럼에 하위 질의가 들어갈 경우, 하위 질의가 반환하는 결과는 하나여야 한다. 그렇지 않을 경우, ORA-01427 가 발생할 것이다.
동일한 에러가 발생한 경우, 반환하는 결과가 하나가 되도록 만들어야 할 것이다.