MySQL - 如何在存储过程中抛出异常?

时间:2012-02-03 15:46:16

标签: mysql exception stored-procedures

如何在MySQL的存储过程中生成异常?例如:

CREATE PROCEDURE SALES()
BEGIN

STATEMENT...
STATEMENT...
STATEMENT...

IF (PRICE >= 500) THEN
/** THROWS AN EXCEPTION....  
    WHAT DO TO STOP THE PROCEDURE. **/
END IF;

STATEMENT...
STATEMENT...
STATEMENT...

END;

在MySQL中我认为没有办法在存储过程中抛出异常,但我可以通过从不存在的表中选择来强制错误。例如:

IF (PRICE > 500) THEN
    /*throw the error here*/
    SELECT * FROM price_greater_than_500_in_throw_exception;
END IF;

有更优雅的方式吗?

感谢。

2 个答案:

答案 0 :(得分:15)

自MySQL 5.5起,您可以使用SIGNALRESIGNAL进行错误处理。在此之前,没有办法处理MySQL中的错误。唯一的方法是运行错误的查询(例如插入到非现有的表中)。

答案 1 :(得分:8)

这是一个如何在mysql中引发异常的示例,该异常适用于5.5及更高版本:

SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Custom error';

详细信息可以在这里找到:https://dev.mysql.com/doc/refman/5.5/en/signal.html