是否可以在函数中使用过程?例如,我想收集与一个id相关的所有行,但我也想计算行数并在select语句中使用它。这不起作用:
drop procedure if exists relatives;
create procedure relatives(in parent int(11),out counted int(11))
begin
set counted=(select count(*) from category where related=parent);
end;
drop function if exists relatives_count;
create function relatives_count(parent parent(11)) returns int(11)
begin
declare count int(11);
call relatives(parent,counted);
return counted;
end;
这样我就可以用计数了
select relatives_count(id) from category
这只是出于好奇。它可能看起来毫无意义,因为我可以只调用一个select查询并得到相同的结果,但我想知道如何在函数中使用procedure out变量。
1条答案
按热度按时间olmpazwi1#
是的,一个mysql
FUNCTION
可以调用mysqlPROCEDURE
.但是。。。过程执行的操作将限于函数允许的操作(我们不能使用过程来绕过对函数的限制。)
“不起作用”是如此模糊,以至于在调试这个问题时几乎毫无用处。观察到的确切行为是什么?
我怀疑显示的sql语句失败了,因为没有重写默认语句分隔符。
也,
parent(11)
不是有效的数据类型。请注意,当mysql存储程序中sql语句中的列的标识符与用于参数或局部变量的标识符匹配时,mysql将遵循一个规则,即引用哪个(列名或变量)。
最佳实践是对与列名不匹配的参数和局部变量采用命名约定,并用表名或表别名限定所有列引用。
就我个人而言,我对参数和局部变量使用前缀(a表示参数,l表示局部变量,后跟数据类型i表示整数,d表示日期/日期时间,n表示小数。。。
请确认您观察到的确切行为。创建过程时出现错误消息?执行函数时出现错误消息?意外行为。这比告诉我们一些“行不通”的事情要精确得多,信息量也要大得多。