是否可以在函数内部使用过程?例如,我想收集与id相关的所有行,但我还想计算行并在select语句中使用它。这不起作用:
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.show(new FragmentIncomingNotification())
.commit();
这样我就可以使用计数
了 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;
这只是出于好奇的目的。它可能看起来毫无意义,因为我可以调用单个选择查询并获得相同的结果,但我想知道如何在函数中使用我的过程输出变量。
答案 0 :(得分:2)
是的,MySQL FUNCTION
可以调用MySQL PROCEDURE
。
但是......程序执行的操作将仅限于函数允许的操作。 (我们无法使用某个过程来解决对函数的限制。)
"不工作"是如此模糊不清,以至于在调试问题时实际上毫无用处。正在观察确切的行为?
我怀疑所显示的SQL语句是否失败,因为默认语句分隔符没有覆盖。
此外,parent(11)
不是有效的数据类型。
请注意,当MySQL存储程序中的SQL语句中的列的标识符匹配用于参数或局部变量的标识符时,MySQL遵循关于哪个列的名称(列名称或正在引用的变量。
最佳做法是对与列名不匹配的参数和局部变量采用命名约定,并使用表名或表别名限定所有列引用。
就个人而言,我使用参数和局部变量的前缀(a为参数,l为本地,后跟数据类型i表示整数,d表示日期/日期时间,n表示小数,...
DELIMITER $$
DROP PROCEDURE IF EXISTS relatives$$
CREATE PROCEDURE relatives(IN ai_parent INT(11),OUT ai_counted INT(11))
BEGIN
SELECT COUNT(*)
INTO ai_counted
FROM category c
WHERE c.related = ai_parent
;
END$$
DROP FUNCTION IF EXISTS relatives_count$$
CREATE FUNCTION relatives_count(ai_parent INT(11))
RETURNS INT(11)
BEGIN
DECLARE li_counted INT(11);
CALL relatives(ai_parent,li_counted);
RETURN li_counted;
END$$
DELIMITER ;
请确定您观察到的完全行为。创建过程时出现错误消息?执行功能时出现错误信息?意外的行为。这比告诉我们某些东西更加精确和有益,并且不能正常工作"。