오류가 발생했을 때 적절한 오류 메시지를 던지며 이를 체계적으로 처리하는 것은 매우 중요합니다. MySQL은 이러한 오류를 처리할 수 있도록 핸들러(handler) 기능을 제공하며, 아래 문법을 사용해 손쉽게 선언할 수 있습니다.
핸들러 선언 문법
DECLARE handler_action FOR condition_value statement;
위 문법에서 확인할 수 있듯이, 핸들러는 DECLARE HANDLER 문을 통해 선언합니다. 조건 값(condition_value)과 일치하는 조건이 발생하면 MySQL은 지정된 문(statement)을 실행한 뒤, handler_action에 따라 현재 코드 블록을 계속 실행하거나 종료합니다. 이 문법의 핵심 구성 요소는 다음 세 가지입니다.
1. handler_action (핸들러 동작)
핸들러 동작은 두 가지 유형이 있으며, 다음 값 중 하나를 가질 수 있습니다.
- CONTINUE – 오류가 발생해도 해당 코드 블록의 실행을 계속 진행합니다.
- EXIT – 오류가 발생하면 해당 코드 블록의 실행을 즉시 종료합니다.
2. condition_value (조건 값)
조건 값은 핸들러를 활성화시키는 특정 조건 또는 조건의 범주를 지정합니다. 다음 값 중 하나를 사용할 수 있습니다.
- MySQL 오류 코드(ERROR CODE) – MySQL 고유의 숫자형 오류 코드를 지정할 수 있습니다.
- SQLSTATE – 5자리 SQLSTATE 값을 지정할 수 있습니다.
- SQLWARNING – 경고(warning)에 해당하는 모든 조건을 처리합니다.
- NOT FOUND – 커서나 SELECT INTO 문에서 데이터를 찾지 못한 경우를 처리합니다.
- SQLEXCEPTION – SQLWARNING과 NOT FOUND를 제외한 모든 예외를 처리합니다.
3. statement (실행 문)
statement는 단순히 하나의 문장일 수도 있고, BEGIN과 END 키워드로 감싼 복합문(compound statement)일 수도 있습니다. 복합문을 사용하면 여러 개의 처리 로직을 한 번에 실행할 수 있습니다.
실전 예제
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET got_error = 1;
위 예제의 핸들러는 SQLEXCEPTION, 즉 예외가 발생하면 got_error 변수의 값을 1로 설정한 후 실행을 계속 진행하라는 의미입니다. 이처럼 핸들러를 활용하면 저장 프로시저나 함수 내부에서 오류를 우아하게 처리하고, 프로그램이 비정상적으로 중단되는 상황을 효과적으로 방지할 수 있습니다.