ORA-01403: 데이터가 없습니다 오류 해결법
Oracle의 PL/SQL을 사용하면서 SELECT INTO 구문을 사용할 때 아래와 같은 오류를 경험해본 적 있으신가요?
ORA-01403: no data found
이 오류는 쿼리에서 단일 행을 반환해야 하는데, 아무 데이터도 반환되지 않을 때 발생합니다. 특히 PL/SQL 블록에서 자주 발생하며, 예외 처리 코드를 작성하지 않으면 프로그램이 강제 종료될 수 있습니다.
1. ORA-01403 오류란?
ORA-01403
오류는 SELECT INTO 구문에서 반환된 결과가 0건일 때 발생합니다.
PL/SQL에서는 SELECT INTO 구문이 반드시 정확히 1건의 결과를 반환해야 하며, 그렇지 않으면 예외로 간주됩니다.
2. 주요 발생 원인
- 🔍 WHERE 조건에 맞는 데이터가 존재하지 않음
- 📜 SELECT INTO 구문이 결과를 반환하지 못함
- 🧱 예외 처리(예: EXCEPTION WHEN NO_DATA_FOUND)가 없음
- 📄 멀티행 쿼리를 잘못 단일 변수에 바인딩
3. 해결 방법
✔️ 1. SELECT INTO 구문 결과가 존재하는지 먼저 확인
DECLARE
v_name VARCHAR2(50);
BEGIN
SELECT name INTO v_name
FROM employees
WHERE employee_id = 9999;
DBMS_OUTPUT.PUT_LINE('이름: ' || v_name);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('해당 직원이 존재하지 않습니다.');
END;
✔️ 2. 예외 처리 구문 추가
PL/SQL 블록에서는 반드시 EXCEPTION
절을 추가하여 오류를 잡을 수 있도록 합니다.
✔️ 3. IF EXISTS 또는 COUNT를 이용한 조건 검사
DECLARE
v_exists NUMBER;
BEGIN
SELECT COUNT(*) INTO v_exists
FROM employees
WHERE employee_id = 9999;
IF v_exists > 0 THEN
DBMS_OUTPUT.PUT_LINE('존재함');
ELSE
DBMS_OUTPUT.PUT_LINE('존재하지 않음');
END IF;
END;
4. 예제 및 실습
예제 1: 오류 발생 예
DECLARE
v_name VARCHAR2(50);
BEGIN
SELECT name INTO v_name
FROM customers
WHERE customer_id = 10000; -- 존재하지 않음
DBMS_OUTPUT.PUT_LINE(v_name);
END;
👉 결과: ORA-01403 오류 발생
예제 2: 예외 처리 추가
DECLARE
v_name VARCHAR2(50);
BEGIN
SELECT name INTO v_name
FROM customers
WHERE customer_id = 10000;
DBMS_OUTPUT.PUT_LINE(v_name);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('고객 정보가 없습니다.');
END;
5. 예방 및 팁
- ✅ SELECT INTO 사용 시 항상
예외 처리 구문
추가 - ✅ 데이터 존재 여부는
COUNT 또는 EXISTS
로 미리 확인 - ✅ SELECT INTO는 반드시 1건만 반환하도록 설계
- ✅ 다건 처리 시에는 CURSOR 또는 LOOP 사용
🔚 마무리
ORA-01403 오류는 실수로 발생하는 경우가 많지만, 예외 처리만 잘해도 안정적인 PL/SQL 코드를 만들 수 있습니다. 실제 서비스에서는 오류 메시지를 사용자에게 직접 노출하지 않고, 예외 상황을 부드럽게 처리하는 것이 중요합니다.
도움이 되셨다면 댓글과 좋아요, 구독 부탁드립니다. Oracle 오류 시리즈는 계속 업데이트됩니다 😊
'ORACLE' 카테고리의 다른 글
ORA-04098 오류 해결 방법 | 트리거 무효 오류 완전 분석 (0) | 2025.04.14 |
---|---|
ORA-01555 오류 해결 방법 | Snapshot too old 예외 완전 정복 (0) | 2025.04.13 |
ORA-00001 오류 해결 방법 | Oracle UNIQUE 제약 조건 위반 완전 정복 (0) | 2025.04.11 |
ORA-01017 오류 해결 방법 | Oracle 로그인 실패 원인과 대처법 (0) | 2025.04.10 |
ORA-00904 오류 해결 방법 | Oracle SQL 컬럼 오류 완전 정복 (0) | 2025.04.09 |