본문 바로가기
ORACLE

ORA-01403 오류 해결 방법 | Oracle 데이터 없음 예외 완전 분석

by samie 2025. 4. 12.
ORA-01403 오류 해결 방법 | Oracle 데이터 없음 예외 완전 분석

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 오류 시리즈는 계속 업데이트됩니다 😊