使用SQLSTATE在MySQL中使用变量作为错误代码

时间:2014-01-29 20:30:25

标签: mysql

我正在尝试使用名为“error_messages”的过程和错误消息表来管理MySQL中的错误。

如何设法在该表中选择特定的错误消息?

我想做这样的事情。

DELIMITER $$

CREATE PROCEDURE throw_error_test (divisor INT)
BEGIN
  SET @errorCode = '45123';
  IF divisor = 0 THEN
    SIGNAL SQLSTATE @errorCode
    SET MESSAGE_TEXT = SELECT message 
                       FROM error_messages
                       WHERE id = @errorCode;
  END IF;
END;

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

正如SIGNAL Syntax所述:

  

SIGNAL语句中的 condition_value 表示要返回的错误值。它可以是SQLSTATE值(5个字符的字符串文字)或 condition_name ,它引用之前使用{{{ 3}}(见DECLARE ... CONDITION)。

[ deletia ]
     

可以使用存储过程或函数参数,使用Section 13.6.7.1, “DECLARE ... CONDITION Syntax”声明的存储程序局部变量,用户定义的变量来指定有效的 simple_value_specification 指示符,系统变量或文字。

因此,对于MESSAGE_TEXT,您可以使用用户变量 - 但我的偏好是存储的程序局部变量;但是无法使用变量指定SQLSTATE

CREATE PROCEDURE throw_error_test (divisor INT)
BEGIN
  DECLARE _messageText VARCHAR(128);

  IF divisor = 0 THEN
    SELECT message
    INTO   _messageText
    FROM   error_messages
    WHERE  id = '45123';

    SIGNAL SQLSTATE '45123' SET MESSAGE_TEXT = _messageText
  END IF;

END

为避免疑问,下划线_前缀纯粹是我采用的避免歧义的约定 - 它们不是本地变量名称的必要部分。