PL/SQL을 활용한 개발 중, ORA-06592: CASE 문을 실행하는 중 CASE를 찾을 수 없음이라는 오류를 마주했다면 CASE 문에서 모든 가능성을 처리하지 않았기 때문일 가능성이 높습니다. 이번 포스팅에서는 이 오류의 원인과 해결 방법을 예제와 함께 살펴봅니다.
ORA-06592 오류 원인
ORA-06592 오류는 CASE 문에서 특정 값에 대해 명시된 조건이 없고, 기본 처리를 위한 ELSE 절이 생략된 경우 발생합니다. CASE 문은 모든 입력값에 대해 반드시 결과를 반환해야 합니다. 만약 입력값이 WHEN 절의 어떤 조건에도 해당하지 않는다면 ELSE 절이 필요합니다. 그렇지 않으면 PL/SQL이 적합한 조건을 찾지 못해 오류를 반환합니다.
ORA-06592 문제가 되는 코드 예제
다음 예제는 SALESMAN이라는 값을 처리하는 조건이 없고, ELSE 절도 생략되어 있습니다. 이로 인해 CASE 문이 해당 입력값에 대해 적절한 결과를 반환하지 못해 오류를 발생시킵니다.
DECLARE
vSALARY_RATE NUMBER;
FUNCTION CALCULATE_SALARY_RATE(
aJOB IN VARCHAR2
) RETURN NUMBER IS
vRATE NUMBER := 0;
BEGIN
-- 직업에 따른 급여 비율 설정
CASE aJOB
WHEN 'MANAGER' THEN
vRATE := 1.5;
WHEN 'CLERK' THEN
vRATE := 1.0;
WHEN 'ANALYST' THEN
vRATE := 1.8;
-- 'SALESMAN' 등 나머지 값 처리 없음
END CASE;
RETURN vRATE;
END CALCULATE_SALARY_RATE;
BEGIN
-- 함수 호출
vSALARY_RATE := CALCULATE_SALARY_RATE('SALESMAN');
-- 결과 출력
DBMS_OUTPUT.PUT_LINE('Calculated Salary Rate: ' || vSALARY_RATE);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM); -- 에러 메시지 출력
END;
/
--Error: ORA-06592: CASE not found while executing CASE statement
--PL/SQL procedure successfully completed.
실행 결과, 위 코드를 실행하면 다음과 같은 오류 메시지가 출력됩니다
ORA-06592: CASE 문을 실행하는 중 CASE를 찾을 수 없음
PL/SQL: Statement ignored해결 방법
문제를 해결하려면 CASE 문에 모든 입력값을 처리할 수 있도록 ELSE 절을 추가해야 합니다. ELSE 절을 사용하면 WHEN 조건에 해당하지 않는 모든 경우에 대해 기본 동작을 정의할 수 있습니다.
수정된 코드
아래는 CASE 문에 ELSE 절을 추가하여 문제를 해결한 예제입니다
DECLARE
vSALARY_RATE NUMBER;
FUNCTION CALCULATE_SALARY_RATE(
aJOB IN VARCHAR2
) RETURN NUMBER IS
vRATE NUMBER := 0;
BEGIN
-- 직업에 따른 급여 비율 설정
CASE aJOB
WHEN 'MANAGER' THEN
vRATE := 1.5;
WHEN 'CLERK' THEN
vRATE := 1.0;
WHEN 'ANALYST' THEN
vRATE := 1.8;
ELSE
vRATE := 0.8; -- 나머지 값에 대한 기본 처리
END CASE;
RETURN vRATE;
END CALCULATE_SALARY_RATE;
BEGIN
-- 함수 호출
vSALARY_RATE := CALCULATE_SALARY_RATE('SALESMAN');
-- 결과 출력
DBMS_OUTPUT.PUT_LINE('Calculated Salary Rate: ' || vSALARY_RATE);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM); -- 에러 메시지 출력
END;
/
수정된 코드의 실행 결과
수정된 코드를 실행하면 오류 없이 다음과 같은 결과가 출력됩니다
Calculated Salary Rate: 0.8
왜 ELSE 절이 중요한가요?
CASE문은 PL/SQL의 컨트롤 구조 중 하나로, 입력값에 따라 여러 분기 처리를 수행합니다. 하지만 입력값이WHEN조건에 해당하지 않을 경우, 실행이 멈추고 오류가 발생합니다.ELSE절을 추가하면 예상치 못한 입력값이 들어와도 기본값으로 처리하여 코드가 안정적으로 동작합니다.
마무리
ORA-06592 오류는 CASE 문에서 모든 입력값을 처리하지 못한 경우 발생하는 일반적인 문제입니다. 이를 방지하려면 ELSE 절을 추가하거나, 모든 가능한 입력값을 WHEN 조건으로 명시해야 합니다. 😊
IF는 ELSE절이 없더라도 디버깅 환경에 따라 워닝 정도를 표시할 수도 있는데요, 그래도 사용하는 것을 권장하는 편이에요.
