Oracle Trouble Shooting - [ORA-01427] 단일 행 하위 질의에 2개 이상의 행이 리턴되었습니다.

IRISH·2024년 5월 14일
0

Oracle

목록 보기
17/17
post-thumbnail

에러 발생 과정

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'

  • 코드블럭에 있는 쿼리를 실행했는데, 위 이미지와 같이 “[ORA-01427] 단일 행 하위 질의에 2개 이상의 행이 리턴되었습니다. - 240514” 에러가 발생

에러 분석

코드 블럭에 있는 update문을 보면 SET 절에 있는 SITENMCD 를 하위 쿼리를 통해 갱신하려고 했다.

그럴 경우에는 하위 쿼리를 통해 나와야 하는 결과는 하나여야 문제가 없는데, 이 에러가 발생한 이유는 하위 쿼리를 통한 결과가 2개 이상이였기 때문이다.

에러 해결

나와 같은 경우, GRA_PIP_M 이란 테이블에 있는 특정 PIPNO에 해당하는 SITENM 과 동일한 ENTERPRISNM을 갖고 있는 ENTERPRISECODE가 GRA_ENTERPRISE_M 에 여러개 있었다.

따라서, 동일한 ENTERPRISNM을 갖고 있는 ENTERPRISECODE 목록 중 1개를 제외하고 나머지를 모두 Delete 하거나 / ENTERPRISECODE 마다 ENTERPRISNM 가 다르도록 수정했다.

다음에 동일한 에러가 발생하면 어떻게 해야 할까?

update를 하려고 하는 특정 컬럼에 하위 질의가 들어갈 경우, 하위 질의가 반환하는 결과는 하나여야 한다. 그렇지 않을 경우, ORA-01427 가 발생할 것이다.

동일한 에러가 발생한 경우, 반환하는 결과가 하나가 되도록 만들어야 할 것이다.

Reference

profile
#Software Engineer #IRISH

0개의 댓글