[MySQL] DECLARE ... CONDITION

참고

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;

links

social