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] 데이터를 찾을 수 없습니다. 해결방법이었다!