PL/SQL 에서 SELECT INTO 를 이용해 변수에 값을 넣을 때, 간혹 ORA-01403: no data found 의 오류가 발생한다.

원인은 SELECT 문의 Return Row 가 0건 이기 때문이다. 

아래와 같은 SELECT INTO 절 이 있을 때 해결방법은 이러하다.

SELECT SETU_VAL1
  INTO L_SETU_VAL
  FROM CA_TEST_SETU
 WHERE ITEM_ID = 'TEST1';

 

1. Exception 이용하기

NO_DATA_FOUND 발생 시 값을 넣어준다.

BEGIN
	SELECT SETU_VAL1  
	  INTO L_SETU_VAL
	  FROM CA_TEST_SETU
	 WHERE ITEM_ID = 'TEST1';
EXCEPTION
 	WHEN NO_DATA_FOUND THEN L_SETU_VAL := 'A';
END;

 

2. MAX 이용하기

MAX 를 이용하면 1개의 행이 반환 되기 때문에 오류가 나지 않는다.

SELECT MAX(SETU_VAL1)
  INTO L_SETU_VAL
  FROM CA_TEST_SETU
 WHERE ITEM_ID = 'TEST1';

 

3. DUAL 이용하기

DUAL 로 감싸주면 NO DATA FOUND 오류가 나지 않는다.

SELECT 
      (SELECT SETU_VAL1
        INTO L_SETU_VAL
        FROM CA_TEST_SETU
       WHERE ITEM_ID = 'TEST1')
FROM DUAL;

 

위의 방법 중 선택하면 되며, 개인적으로는 1번째의 방법을 선호한다.

코딩은 각자의 스타일도 있겠지만, 해당 조직의 스타일도 있으니 고려해서 결정하면 된다.

이상 ORA-01403: no data found] 데이터를 찾을 수 없습니다. 해결방법이었다!

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기