选择...进入语句不会返回预期的错误

问题描述

我正在创建一个函数,在其中尝试从MySQL数据库的表中获取一行。我正在尝试here中记录的“ select ... into”语句,因为它具有我所期望的行为。调用该函数时,我想要的结果是:

  • 一行:结果显示出来,一切都很好;
  • 无行:错误,代码为1329(无数据);
  • 多行:错误,代码为1172(多行)。

这是我的功能:

CREATE FUNCTION test_function()
RETURNS int
deterministic
BEGIN
    declare var int;
    select some_column into var from my_table where filter = 1;
    return var;
END

现在,如果我在过滤器= 1的那一行有一个记录,那么一切都很好,但是如果我没有该过滤器值的行,那么我得到的是Null而不是错误!另一方面,如果我得到的结果多于一行,则会得到预期的错误。

我试图修改代码以使用游标。这是我的第二次尝试:

CREATE FUNCTION test_function()
RETURNS int
deterministic
BEGIN
    declare var int;
    declare my_cursor cursor for select some_column from my_table where filter = 1;
    
    open my_cursor;
    fetch my_cursor into var;
    close my_cursor;

    return var;
END

现在交换结果!如果没有任何行,则会得到我期望的错误代码。如果我只有一行具有该过滤器值,那么一切都很好。但是,如果我所说的过滤器有多于一行,它将返回一个结果(不是所有与过滤器值匹配的结果),而不是错误。

编辑:我应该提一下,我最终可以使用Signal语句抛出我想要的错误,但是我觉得我不必求助于此。正如正式记录的那样,上述问题与预期行为有关。另外,据我所知,Signal会创建用户定义的错误,而我实际上是在追随MySQL通常返回的标准错误。

EDIT2:即使最终可以实现,也无法解决从数据库接收信息的软件的问题。我试图特别地理解为什么我不能使“ select ... into”语句如文档中所述起作用。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...