[MySQL] SIGNAL Statement

참고

MySQL Documentation

설명

  • 에러를 리턴하도록 하는데 사용
  • 에러의 error number, SQLSTATE value, message를 컨트롤 가능
  • 만약 SIGNAL을 사용하지 않고 에러를 발생시키기 위해서는 의도적으로 존재하지 않는 테이블을 참조하도록 하는 방법을 사용한다.
  • SIGNAL statement는 실행하는데 권한이 필요하지 않음

syntax

SIGNAL condition_value
    [SET signal_information_item
    [, signal_information_item] ...]

condition_value: {
    SQLSTATE [VALUE] sqlstate_value
  | condition_name
}

signal_information_item:
    condition_information_item_name = simple_value_specification

condition_information_item_name: {
    CLASS_ORIGIN
  | SUBCLASS_ORIGIN
  | MESSAGE_TEXT
  | MYSQL_ERRNO
  | CONSTRAINT_CATALOG
  | CONSTRAINT_SCHEMA
  | CONSTRAINT_NAME
  | CATALOG_NAME
  | SCHEMA_NAME
  | TABLE_NAME
  | COLUMN_NAME
  | CURSOR_NAME
}

condition_name, simple_value_specification:
    (see following discussion)

condition_value

  • 리턴되는 error value를 나타낸다.
  • SQLSTATE value 또는 DECALRE CONDITION으로 만들어진 condition_name이 사용될 수 있다.
  • SQLSTATE value의 경우 00으로 시작하는 값은 올 수 없다(해당 값들은 성공으로 취급되기 때문)
  • SQLSTATE value 45000의 경우 “unhandled user-defined exception.”을 의미하는 것으로 사용된다.

signal_information_item

  • condition_information_item_name 항목 참조

condition_information_item_name

  • exception에 대한 정보를 저장

예시

CREATE PROCEDURE p (pval INT)
BEGIN
  DECLARE specialty CONDITION FOR SQLSTATE '45000';
  IF pval = 0 THEN
    SIGNAL SQLSTATE '01000';
  ELSEIF pval = 1 THEN
    SIGNAL SQLSTATE '45000'
      SET MESSAGE_TEXT = 'An error occurred';
  ELSEIF pval = 2 THEN
    SIGNAL specialty
      SET MESSAGE_TEXT = 'An error occurred';
  ELSE
    SIGNAL SQLSTATE '01000'
      SET MESSAGE_TEXT = 'A warning occurred', MYSQL_ERRNO = 1000;
    SIGNAL SQLSTATE '45000'
      SET MESSAGE_TEXT = 'An error occurred', MYSQL_ERRNO = 1001;
  END IF;
END;

links

social