Почему mysql дает ошибку "Не разрешено возвращать набор результатов из функции"?
Я пытаюсь создать функцию MySQL с помощью phpMyAdmin и получить эту ошибку.
#1415 - Not allowed to return a result set from a function
Код функции приведен ниже
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 ;
Любые предложения?
Заранее спасибо
Ответы
Ответ 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;