본문으로 바로가기

    

 

이번 글에서는 ORA-01427: 단일 행 하위 질의에 2개 이상의 행이 리턴되었습니다. 에러 해결방법에 대하여 알아보겠습니다.

 

ORA-01427: 단일 행 하위 질의에 2개 이상의 행이 리턴되었습니다.

ORA-01427: "single-row subquery returns more than one row"

 

 

쿼리를 짜다가 아래와 같은 에러가 발생하였습니다.

 

 

예제를 통하여 에러가 발생한 이유와 해결 방법에 대하여 알아보도록 하겠습니다.

아래의 쿼리는 dpetno가 10인 dept 테이블의 전체 컬럼을 조회하려고 작성한 예제입니다.

 

위의 쿼리를 실행하니 ORA-01427: "single-row subquery returns more than one row" 에러가 발생하였습니다.

에러가 발생한 이유는 WHERE 절에서 특별한 함수(IN() 등) 없이 사용되면 단일 행 서브쿼리로 조회된 행이 반드시 한 개가 와야 합니다.

 

하지만, 위의 쿼리를 보면 조회된 값으로 1개가 아닌 3개가 왔습니다. 

즉, 위의 예제를 다시 보면 WHERE deptno = 10 10 10 이렇게 바인딩이 된거라고 볼 수 있습니다.

따라서,  조회된 행이 1개인 것만 단일 행 서브쿼리로 넣을 수 있습니다.

 

해결 방법

서브쿼리의 실행 결과, 행이 1개인 것만 조건절의 관계연산자에 넣을 수 있도록 합니다.

 

서브쿼리의 실행 결과로 1개의 행만 가져오도록 하여 다시 쿼리를 실행해 보도록 하겠습니다.

간단하게 DISTINCT 를 줘서 중복을 허용하지 않게 해서 서브쿼리의 조회가 1개 행만 되도록 하니 정상적으로 실행되는 것을 확인할 수 있습니다.

 

 

References

다중 행 서브쿼리 정리