참고
MySQL Documentation 13.6.7.1 DECLARE ... CONDITION Statement
설명
- 특정 처리를 필요로 하는 상황을 지칭하는 named error condition을 만드는 데 사용
- stored program 코드를 명확하게 하는데 도움이 됨(예시 참고)
- 선언된 컨디션은 DECLARE ... HANDLER 구문에 사용될 수 있음
- 선언 위치는 CURSOR와 HANDLER 선언 이전에 위치해야 함
syntax
DECLARE condition_name CONDITION FOR condition_value
condition_value: {
mysql_error_code
| SQLSTATE [VALUE] sqlstate_value
}
condition_name
- 컨디션 이름
condition_value
- 특정 상황에 관한 코드
- 아래와 같은 값들이 올 수 있다.
mysql_error_code
- MySQL error code를 나타내는 정수 리터럴
- 0을 쓰면 안된다. 이는 오류보다는 성공을 가리키는 코드이기 때문
- 에러코드 참고 Server Error Message Reference
SQLSTATE [VALUE] sqlstate_value
- SQLSTATE를 가리키는 5글자 문자열 리터럴
- 00 으로 시작하는 코드를 쓰면 안된다. 이는 오류보다는 성공을 가리키는 상태이기 때문
- 에러상태 참고(위와 동일) Server Error Message Reference
예시
CONDITION을 사용하지 않았을 때
- mysql_error_code 1051은 Unknown table을 가리키는 코드
- 해당 코드의 의미를 알아야만 코드를 이해할 수 있음
DECLARE CONTINUE HANDLER FOR 1051
BEGIN
-- body of handler
END;
CONDITION을 사용하였을 때
- mysql_error_code 1051이 가리키는 의미를 나타내는 컨디션을 생성
- HANDLER를 선언할 때 해당 핸들러가 어떤 상황을 처리하는지 명확하게 알 수 있음
DECLARE no_such_table CONDITION FOR 1051;
DECLARE CONTINUE HANDLER FOR no_such_table
BEGIN
-- body of handler
END;
SQLSTATE 사용
- mysql_error_code 1051와 동일한 SQLSTATE 값
DECLARE no_such_table CONDITION FOR SQLSTATE '42S02';
DECLARE CONTINUE HANDLER FOR no_such_table
BEGIN
-- body of handler
END;