我正在尝试使用名为“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;
感谢您的帮助
答案 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
为避免疑问,下划线_
前缀纯粹是我采用的避免歧义的约定 - 它们不是本地变量名称的必要部分。