MySQL 저장 프로시저를 실행하는 도중 예외(exception)가 발생하면, 적절한 오류 메시지를 던져 이를 처리하는 것이 매우 중요합니다. 만약 예외를 별도로 처리하지 않으면, 저장 프로시저 내부에서 발생한 특정 예외로 인해 애플리케이션 전체가 비정상적으로 종료될 위험이 있습니다.
이러한 문제를 방지하기 위해 MySQL은 저장 프로시저 안에서 예외를 처리할 수 있는 핸들러(Handler) 기능을 제공합니다. 저장 프로시저에서 사용할 수 있는 대표적인 MySQL 핸들러는 다음과 같이 네 가지가 있습니다.
1. CONTINUE 핸들러 – 오류 메시지 출력 후 계속 실행
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SELECT 'got an error';위 핸들러는 예외가 발생했을 때 'got an error'라는 오류 메시지를 출력한 뒤, 프로시저의 나머지 실행을 계속 진행합니다.
2. CONTINUE 핸들러 – 변수 설정 후 계속 실행
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET got_error=1;위 핸들러는 예외 발생 시 변수 got_error의 값을 1로 설정하고 실행을 계속 진행합니다. 이후 이 변수 값을 확인하여 오류 여부를 판단할 수 있습니다.
3. EXIT 핸들러 – 변수 설정 후 실행 종료
DECLARE EXIT HANDLER FOR SQLEXCEPTION SET got_error=1;위 핸들러는 예외가 발생하면 변수 got_error를 1로 설정한 뒤, 프로시저의 실행을 즉시 종료합니다.
4. SQLSTATE 기반 EXIT 핸들러 – 기본 오류 메시지와 함께 종료
DECLARE EXIT HANDLER FOR SQLSTATE '23000' SET got_error=1;위 핸들러는 SQLSTATE 코드 '23000'(무결성 제약 조건 위반 등)에 해당하는 예외가 발생하면, MySQL의 기본 오류 메시지를 출력하고 변수 got_error를 1로 설정한 후 실행을 종료합니다.
정리
핸들러는 크게 CONTINUE와 EXIT 두 가지 동작 방식으로 나뉩니다. CONTINUE 핸들러는 오류 발생 후에도 프로시저 실행을 이어가고, EXIT 핸들러는 오류 발생 시점에 실행을 중단합니다. 또한 SQLEXCEPTION으로 일반적인 모든 SQL 오류를 잡을 수 있고, SQLSTATE 코드를 지정하면 특정 조건의 오류만 선택적으로 처리할 수 있습니다. 상황에 맞는 핸들러를 활용하면 저장 프로시저의 안정성과 유지보수성을 크게 높일 수 있습니다.