ORA-01427: 단일 행 하위 질의에 2개 이상의 행이 리턴되었습니다.
"single-row subquery returns more than one row"

 

데이터 확인을 위해 SQL 질의문을 작성하다 보면 가끔씩 마주치는 오류이다.

-- ORA-01427 오류 발생
SELECT
	*
FROM
	TB_USER
WHERE
	USER_NO = (
    	SELECT USER_NO
        	FROM TB_USER
	)

 

조건문에 들어간 서브쿼리가 하나 이상의 결과값을 뱉어내면 위와 같은 오류 메시지가 출력되는데 해결 방법은 간단하다.

 

1. equlas(=) 로 검색하려는 조건을 'IN'으로 수정하기

2. 하나의 결과만 정확하게 출력할 수 있도록 서브쿼리 수정하기

 

아래는 예시이다!

 

-- 1번
SELECT
	*
FROM
	TB_USER
WHERE
	USER_NO IN (
    	SELECT USER_NO
        	FROM TB_USER
	)
    
----------

-- 2번
SELECT
	*
FROM
	TB_USER
WHERE
	USER_NO IN (
    	SELECT USER_NO
        	FROM TB_USER
        WHERE USER_NO = ?
	)

 

위의 예시는 이해를 돕기 위해 작성한 것이고 실제 운영중인 혹은 작성하고자 하는 프로그램이 어떤지에 따라 효율적으로 구상해서 작성해야 한다.


단순한 쿼리일지라도 서버의 성능이나 DB의 성능에 따라 조회 시간이 말도 안되게 늘어나는 경우를 종종 봤기 때문에 기초부터 탄탄하게, 꼼꼼하게 쿼리를 작성하는 습관을 길러야겠다!

 

반응형
헌일