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

Veg*_*tus 15 mysql stored-procedures exception

如何在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;
Run Code Online (Sandbox Code Playgroud)

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

IF (PRICE > 500) THEN
    /*throw the error here*/
    SELECT * FROM price_greater_than_500_in_throw_exception;
END IF;
Run Code Online (Sandbox Code Playgroud)

有更优雅的方式吗?

谢谢.

Mch*_*chl 17

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


Ula*_*ach 16

以下是如何在 mysql 中抛出异常的示例,该示例适用于 5.5 及更高版本:

SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Custom error';
Run Code Online (Sandbox Code Playgroud)

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