为啥 MySQL 给出错误“不允许从函数返回结果集”?
Posted
技术标签:
【中文标题】为啥 MySQL 给出错误“不允许从函数返回结果集”?【英文标题】:Why MySQL is giving error "Not allowed to return a result set from a function"?为什么 MySQL 给出错误“不允许从函数返回结果集”? 【发布时间】:2012-08-06 11:52:48 【问题描述】:我正在尝试使用 phpMyAdmin 创建 mysql 函数并收到此错误。
#1415 - 不允许从函数返回结果集
功能代码如下:
DELIMITER $$
CREATE FUNCTION get_binary_count(a INT, c INT)
RETURNS INT
DETERMINISTIC
BEGIN
DECLARE c1, c2 INT;
SET c1 = 0;
SET c2 = 0;
SELECT left_id AS c1 FROM mlm_user_mst WHERE parent_id = a AND left_id > 0;
SELECT right_id AS c2 FROM mlm_user_mst WHERE parent_id = a AND right_id > 0;
IF (c1 > 0 AND c2 > 0) THEN
SET c = c + 1;
SET c = c + get_binary_count(c1, 0);
SET c = c + get_binary_count(c2, 0);
END IF;
RETURN c;
END$$
DELIMITER ;
有什么建议吗?
提前致谢。
【问题讨论】:
已经在***中解决了,请访问链接。 ***.com/questions/16177267/… 【参考方案1】:因为
SELECT left_id AS c1 FROM mlm_user_mst WHERE parent_id=a AND left_id>0;
不设置变量 c1,它返回一个包含名为 c1 的列的集合
你想要
SELECT left_id INTO c1 FROM mlm_user_mst WHERE parent_id=a AND left_id>0;
对于 c2 也是如此。
【讨论】:
【参考方案2】:那是因为您正在使用 SELECT
查询,其输出未存储到变量中或 FUNCTION
中的临时变量中,必须这样做。函数只能返回一个值。所以你的代码应该是这样的:
CREATE TABLE t1 AS SELECT left_id AS c1 FROM mlm_user_mst WHERE parent_id=a AND left_id>0;
CREATE TABLE t2 AS SELECT right_id AS c2 FROM mlm_user_mst WHERE parent_id=a AND right_id>0;
或
SELECT left_id AS c1 INTO @c1 FROM mlm_user_mst WHERE parent_id=a AND left_id>0 LIMIT 1;
SELECT right_id AS c2 INTO @c2 FROM mlm_user_mst WHERE parent_id=a AND right_id>0 LIMIT 1;
【讨论】:
以上是关于为啥 MySQL 给出错误“不允许从函数返回结果集”?的主要内容,如果未能解决你的问题,请参考以下文章
为啥存储过程没有在一个字符串中给出输出并且在 MySql 6.0 上执行的存储过程在 MySql 5.0 上给出错误
MySQL 专家:为啥 2 个查询给出不同的“解释”索引使用结果?