[MySQL / Stored Procedure] 에러 핸들링 시리즈
Stored Procedure가 실행되는 도중에 발생하는 에러는 DECLARE ... HANDLER 구문을 사용해서 처리할 수 있습니다.
MS-SQL의 TRY ... CATCH 구문과 비교했을 때 아무런 부족함이 없다는 점... 칭찬해~
기본 문법
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | DECLARE handler_action HANDLER FOR condition_value [, condition_value] ... statement handler_action: CONTINUE | EXIT | UNDO condition_value: mysql_error_code | SQLSTATE [VALUE] sqlstate_value | condition_name | SQLWARNING | NOT FOUND | SQLEXCEPTION | cs |
DECLARE ... HANDLER 구문을 사용할 수 있는 위치
SP의 body는 반드시 아래의 순서로 작성해야 합니다.
- 모든 지역 변수를 DECLARE 문으로 선언한다.
- DECLARE ... HANDLER 구문을 작성한다.
- SQL 문을 작성한다.
어떤 상태를 캐치할 수 있나?
- 특정 에러
- 특정 ERROR CODE 발생
- 특정 SQLSTATE 발생
- SQLSTATE는 5자리 문자열 임
- SQLWARNING
- 에러가 아닌 경고가 발생
- SQLSTATE는 '01'로 시작 함
- NOT FOUND
- 커서가 마지막 레코드에 도달하여, 다음 레코드를 Fetch하지 못했을 때
- SQLSTATE는 '02'로 시작함
- SQLEXCEPTION
- 에러가 발생
- SQLSTATE가 '00', '01', '02'로 시작하지 않는 나머지 모두
특정 상태를 캐치했을 때 무엇을 할 수 있나?
- CONTINUE
- DECLARE CONTINUE HANDLER의 BEGIN ~ END 블럭을 실행하고, 이하의 SP 본문을 이어서 계속 실행합니다.
- EXIT
- DECLARE EXIT HANDLER의 BEGIN ~ END 블럭을 실행하고, SP의 실행을 종료합니다.
- UNDO
- 문법에는 나오지만 실제로 UNDO 기능을 지원하진 않습니다.
'MySQL > Stored Procedure' 카테고리의 다른 글
[MySQL / Stored Procedure] 에러 핸들링 (3) CONSTRAINT (上) (0) | 2018.06.20 |
---|---|
[MySQL / Stored Procedure] 에러 핸들링 (2) Error Logging (2) | 2018.06.18 |
[MySQL/Stored Procedure] 접근 제어 설정 (SQL SECURITY) (0) | 2018.06.04 |
[MySQL/Stored Procedure] 명명 규칙 (2) | 2018.06.01 |
MySQL의 Stored Procedure 특성 (0) | 2015.06.26 |