问题描述
我正在创建一个函数,在其中尝试从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 (将#修改为@)