반응형

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

위와 같은 에러 발생은 SELECT문의 데이터 추출시 한 행에 2개 이상의 데이터가 나오는 경우입니다. 단일 테이블의 데이터 추출 시에는 이런 에러를 볼 수 없습니다. 하지만 SELECT문의 서브쿼리를 사용하게 되면 한 행에 2개의 데이터가 나올 수 있습니다.


예를 들어 다음 쿼리는 고객과 고객의 등급을 조회하는 쿼리입니다. (정규화 하지 않은 예제입니다.)

SELECT A.CLOSE_MONTH,        A.USER_NAME,        (SELECT B.GRADE           FROM USER_VIP B         WHERE B.USER_NAME = A.USER_NAME        ) as grade FROM USER_SHOP A ;

SELECT 문에 서브쿼리를 사용하게 되면 하나의 유저네임에 여러개의 등급이 서브쿼리로 나오게 되어 2개 이상의 행이 리턴되었다는 에러가 발생합니다. 에러 발생 시 2개 이상 행이 추출되는지 확인을 하시면 되겠습니다.


팁을 하나 드리자면 GROUP BY 를 이용하여 어떤 유저가 여러개 등급이 나오는지 확인 하면 되는데, 서브쿼리 내 복잡하게 조인이 되어 있는 경우도 있습니다. 이때 빠르게 어떤 유저로 인한 에러가 발생하는지 확인을 하는 방법은 서브쿼리에 CURSOR를 씌어주면 한행에 2개, 3개가 추출되는 값들을 에러 없이 확인 하실 수 있습니다.

반응형

+ Recent posts