首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在MySQL函数中引发错误

如何在MySQL函数中引发错误
EN

Stack Overflow用户
提问于 2009-01-21 15:22:37
回答 5查看 94.7K关注 0票数 73

我已经创建了一个MySQL函数,如果为参数传递的值无效,则会引发一个错误。在MySQL函数中引发错误的选项有哪些?

EN

回答 5

Stack Overflow用户

发布于 2012-08-06 21:39:45

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

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

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

代码语言:javascript
复制
mysql> SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Custom error';
ERROR 1644 (45000): Custom error
票数 90
EN

Stack Overflow用户

发布于 2010-04-23 02:31:03

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

代码语言:javascript
复制
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 ;

输出:

代码语言:javascript
复制
call decount_test(123456);
+----------------------------------------------------+
| Invoiced barcodes may not have accounting removed. |
+----------------------------------------------------+
| Invoiced barcodes may not have accounting removed. | 
+----------------------------------------------------+
票数 25
EN

Stack Overflow用户

发布于 2009-03-31 23:45:43

在MySQL 5中,您可以通过调用不存在的存储过程(调用raise_error)或向查询传递无效值(如null到非NULL约束字段)来引发错误。下面是Roland Bouman关于在MySQL函数中引发错误的一个有趣的帖子:

http://rpbouman.blogspot.com/2005/11/using-udf-to-raise-errors-from-inside.html

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/465727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档