如何在MySQL函数中引发错误

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

6个解决方案

69 votes

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

Austin Hyde answered 2019-10-07T13:38:26Z

25 votes

它实际上是所有三个答案的组合。 您调用一个不存在的过程来引发该错误,然后声明一个退出处理程序来捕获您生成的错误。 这是一个示例,如果要删除的行设置了外键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. |

+----------------------------------------------------+

Ryan M answered 2019-10-07T13:38:54Z

7 votes

为什么不只在声明的INTEGER变量中存储VARCHAR?

DELIMITER $$ DROP FUNCTION IF EXISTS `raise_error` $$

CREATE FUNCTION `raise_error`(MESSAGE VARCHAR(255))

RETURNS INTEGER DETERMINISTIC BEGIN

DECLARE ERROR INTEGER;

set ERROR := MESSAGE;

RETURN 0;

END $$ DELIMITER ;

-- set @foo := raise_error('something failed'); -- or within a query

错误消息是:

不正确的整数值:行“ ERROR”的列“ something failed”   1个

它不是完美的,但是它给出了一个漂亮的描述性消息,您不必编写任何扩展DLL。

answered 2019-10-07T13:39:42Z

5 votes

在MySQL 5中,您可能会通过调用不存在的存储过程(CALL raise_error)或将无效值传递给查询(例如null到NOT NULL禁忌字段)来引发错误。 这是Roland Bouman撰写的有趣的帖子,内容涉及从MySQL函数中引发错误:

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

Patrick de Kleijn answered 2019-10-07T13:40:14Z

2 votes

您还可以使用无效数量的参数调用现有函数。

answered 2019-10-07T13:40:39Z

0 votes

您必须定义异常处理程序。 看看[http://dev.mysql.com/doc/refman/5.0/en/declare-handler.html]

Jorge Niedbalski R. answered 2019-10-07T13:41:09Z

function在mysql里总是出错_如何在MySQL函数中引发错误相关推荐

  1. mysql里乘号怎么_如何在MySQL SELECT上将无符号整数乘以-1?

    让我们首先创建一个表-mysql> create table DemoTable -> ( -> Value int -> ); 使用插入命令在表中插入一些记录-mysql&g ...

  2. mysql数据库存歌_如何在mysql中存储音乐和图片文件

    标签: 如何在mysql中存储音乐和图片文件? 果你想把二进制的数据,比如说图片文件和HTML文件,直接保存在你的MySQL数据库,那么这篇文章就是为你而写的! 我将告诉你怎样通过HTML表单来储存这 ...

  3. mysql怎么插入时间_如何在MySQL中插入日期?

    在MySQL中插入日期的方法:首先打开脚本文件:然后通过[INSERT INTO tablename (col_name, col_date) VALUE ('DATE: Auto CURDATE() ...

  4. MySQL怎么展示表格_如何在MySQL数据库中显示表的架构?

    从MySQL控制台,什么命令显示任何给定表的架构? #1楼 SHOW CREATE TABLE yourTable; 要么 SHOW COLUMNS FROM yourTable; #2楼 descr ...

  5. c 语言 函数返回数组_如何在C ++函数中返回数组

    c 语言 函数返回数组 介绍 (Introduction) In this tutorial, we are going to understand how we can return an arra ...

  6. 安装mysql程序运行出错_如何解决mysql安装后.net程序运行出错的问题

    如何解决mysql安装后.net程序运行出错的问题 发布时间:2020-09-28 17:43:58 来源:亿速云 阅读:93 作者:小新 小编给大家分享一下如何解决mysql安装后.net程序运行出 ...

  7. 怎样往mysql里添加数据_怎么往mysql表里添加数据

    1.我们打开Mysql命令行编辑器,连接Mysql数据库: 2.使用我们要操作的数据库,我们可以先显示一下数据库中的表: 3.显示一下表结构,了解一下表中的列: 4.向表插入数据,insert int ...

  8. mysql schema 保存数据_如何在mysql数据库中保存apache spark schema输出

    任何人都可以告诉我,如果有任何方式在apache的火花存储在mysql数据库的JavaRDD?我从2个CSV文件中获取输入,然后在对其内容进行连接操作之后,我需要将输出(输出JavaRDD)保存在my ...

  9. mysql query 查询失败_如何在mysql进行查询缓存及失败的解决方法

    都知道函数在使用前需要弄清楚参数的属性,这样才能对函数的使用有较好的了解.有些小伙伴学习了查询缓存后,直接进行了下一步的实战操作.这里小编想提醒大家,开始操作之前一定要先设置参数,不然就会出现问题.下 ...

最新文章

  1. Verilog初级教程(1)认识 Verilog HDL
  2. python从基础到入门电子书_python从入门进阶到大神必须看的电子书汇总
  3. CDH6.x Solr7.x 集成 Ik 分词
  4. Cloud一分钟 | 马云发表致股东的公开信;5G算什么?中国已着手研究6G相关工作...
  5. Visual Studio注释快捷键
  6. Linux 搭建zcash结点
  7. 维珍银河创始人布兰森成功进入太空 早于贝佐斯9天
  8. 信息安全完全参考手册之遵循标准、法规和法律(第三章)
  9. 以太坊2.0抵押地址新增13.47万ETH
  10. msyql 授权ip
  11. Andrew ng 深度学习课程笔记
  12. 1010 Radix (25 分) 超级坑恶魔坑
  13. 虚拟化应用(三)Hyper-V 2.0 初探
  14. VLAN Mapping实现同一网段不同VLAN的主机通信
  15. 正则表达式(模拟网络爬虫、网络蜘蛛)
  16. lfs库下载_Git上传大文件夹LFS
  17. 开放平台API安全设计方案
  18. catic备份mysql,caticbj.com
  19. JAVA毕业设计花卉网站计算机源码+lw文档+系统+调试部署+数据库
  20. 情感分析学习笔记(5)——PolarityRank算法原理讲解

热门文章

  1. 如何在Windows 10上安装MySQL数据库服务器8.0.19
  2. [转载] .NET 中可以有类似 JVM 的幻像引用吗?
  3. springboot系列十二、springboot集成RestTemplate及常见用法
  4. freemarker和thymeleaf的使用样例
  5. 第一百八十四节,jQuery-UI,验证注册表单
  6. PostgreSQL高可用性、负载均衡、复制与集群方案介绍
  7. flash as3 socket安全服务网关(socket policy file server)
  8. 利用JS+Ajax实现下拉列表无刷联动,及其相关
  9. Firefox关闭最后一个标签页时不关闭Firefox的设置
  10. 对学习java的心得体会1