2012-08-09 7 views
9

Estoy intentando crear una función MySQL usando phpMyAdmin y obteniendo este error.¿Por qué mysql está dando el error "No se permite devolver un conjunto de resultados desde una función"?

#1415 - Not allowed to return a result set from a function 

El código de función es la siguiente

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 ; 

¿Alguna sugerencia?

Gracias de antemano

+0

Ya resolver en stackoverflow, visite enlace. http://stackoverflow.com/questions/16177267/mysql-function-error-code-1415-not-allowed-to-return-a-result-set-from-a-func – nexttus

Respuesta

21

Debido

SELECT left_id AS c1 FROM mlm_user_mst WHERE parent_id=a AND left_id>0; 

no establece la variable c1, devuelve un conjunto con una columna llamada c1

¿Quieres

SELECT left_id INTO c1 FROM mlm_user_mst WHERE parent_id=a AND left_id>0; 

Del mismo modo para c2.

5

eso se debe a que está utilizando consultas SELECT cuyo resultado no se almacena en variables o temporal dentro de FUNCTION que debe. La función puede devolver solo un valor único. Así que el código debe ser algo como esto:

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; 

o

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; 
Cuestiones relacionadas