복붙노트

[SQL] MySQL의 오류를주고있다 왜 "함수에서 결과 집합을 반환 할 수 없습니다"?

SQL

MySQL의 오류를주고있다 왜 "함수에서 결과 집합을 반환 할 수 없습니다"?

나는 phpMyAdmin에를 사용하여이 오류를 받고 MySQL의 함수를 작성하려합니다.

#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. ==============================

    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. ==============================

    2.당신이 출력이 변수 나해야 일시적으로 내부 기능에 저장되지 않은 SELECT 쿼리를 사용하고 있기 때문이다. 기능은 하나의 단일 값을 반환 할 수 있습니다. 그래서 코드는 다음과 같이해야합니다 :

    당신이 출력이 변수 나해야 일시적으로 내부 기능에 저장되지 않은 SELECT 쿼리를 사용하고 있기 때문이다. 기능은 하나의 단일 값을 반환 할 수 있습니다. 그래서 코드는 다음과 같이해야합니다 :

    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;
    
  3. from https://stackoverflow.com/questions/11880306/why-mysql-is-giving-error-not-allowed-to-return-a-result-set-from-a-function by cc-by-sa and MIT license