반응형
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개가 추출되는 값들을 에러 없이 확인 하실 수 있습니다.
반응형
'DB > Oracle' 카테고리의 다른 글
[DB] 오라클 시퀀스란? (시퀀스 생성, 시퀀스 삭제) (0) | 2019.03.15 |
---|---|
[DB] 오라클 시노님(synonym)이란? (시노님 생성, 시노님 삭제) (0) | 2019.03.14 |
[DB] 오라클 파티션 테이블 정의 및 생성 (0) | 2019.03.13 |
[DB] 오라클 제약조건 (NOT NULL, 기본키, UNIQUE, 외래키, CHECK) (0) | 2019.03.12 |
[DB] 오라클 테이블 생성(+테이블스페이스), 인덱스 생성, 테이블 삭제, 데이터 생성 (0) | 2019.03.07 |