如何在MySQL函数中引发错误

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (16)

我已经创建了一个MySQL函数,如果传递给参数的值无效,我想引发一个错误。在MySQL函数中引发错误的选项是什么?

提问于
用户回答回答于

这实际上是三个答案的结合。可以调用一个不存在的过程来引发错误,然后声明一个退出处理程序来捕获您生成的错误。下面是一个示例,如果要删除的行具有外键id集,则使用SQLSTATE 42000(过程不存在)在删除前抛出错误:

DROP PROCEDURE IF EXISTS decount_test;

DELIMITER //

CREATE DEFINER = 'root'@'localhost' PROCEDURE decount_test ( p_id bigint )
DETERMINISTIC MODIFIES SQL DATA
BEGIN
  DECLARE EXIT HANDLER FOR SQLSTATE '42000'
    SELECT 'Invoiced barcodes may not have accounting removed.';
  IF (SELECT invoice_id 
       FROM accounted_barcodes
       WHERE id = p_id
    ) THEN
    CALL raise_error;
 END IF;
 DELETE FROM accounted_barcodes WHERE id = p_id;
END //

DELIMITER ;

产出:

call decount_test(123456);
+----------------------------------------------------+
| Invoiced barcodes may not have accounting removed. |
+----------------------------------------------------+
| Invoiced barcodes may not have accounting removed. | 
+----------------------------------------------------+
用户回答回答于

Mysql 5.5引入了信号,这些信号类似于其他语言中的异常:

http://dev.mysql.com/doc/refman/5.5/en/signal.html

例如,在mysql命令行客户端:

mysql> SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Custom error';
ERROR 1644 (45000): Custom error

扫码关注云+社区