2013-05-10 4 views
0

업데이트 문의 매개 변수에 조건부 변경을 시도하고 있습니다. 나는 무엇을 놓치고MySQL 오류 : 함수에서 결과 집합을 반환 할 수 없습니다.

use `zestdb`; 
DROP FUNCTION IF EXISTS UPDATEPASSWD; 
DELIMITER // 
CREATE FUNCTION UPDATEPASSWD(n INT) RETURNS varchar(255) DETERMINISTIC 
BEGIN 
    DECLARE mypasswd varchar(255); 
    IF (n = 1) THEN 
     SET mypasswd = '12ccc1e5c3c9203af7752f937fca4ea6263f07a5'; 
     SELECT 'n is 1' AS ' '; 
    ELSE 
     SET mypasswd = '1a7bc371cc108075cf8115918547c3019bf97e5d'; 
     SELECT 'n is 0' AS ' '; 
    END IF;> 
    SELECT CONCAT('mypasswd is ', mypasswd) AS ' '; 
    RETURN mypasswd; 
END // 
DELIMITER ; 
CALL UPDATEPASSWD(0); 

: 다음과 같다 나는 다음과 같은 기능을 testpri.sql의

/home/y/bin/mysql -u root <testpri.sql> out 
ERROR 1415 (0A000) at line 4: Not allowed to return a result set from a function 

내용을하려고 할 때 나는 다음과 같은 오류는 무엇입니까?

답변

2

실제로는 디버그가 SELECT이라고 생각합니다. docs에서

는 :

Statements that return a result set can be used within a stored procedure but not within a stored function. This prohibition includes SELECT statements that do not have an INTO var_list clause...

0

나는 같은 질문에 대한 답을 찾기에 도착, 나는 마음과 영혼 인 SELECT 문을 사용할 수 있도록이 문제를 해결하는 또 다른 방법을 발견 경고를 이끌어 낸 MySQL 함수의

다음 스 니펫을 고려하십시오.

SET의 intNMatches = (SELECT COUNT (*) ...

SET는 포함하기 때문이다. intNMatches에 그 유일한 열 로우 카운트, BIGINT에 로컬 변수 캐스트를 반환 SELECT 문 강제 변환 영업 비밀, 나는 나머지 쿼리를 표시 할 수 없습니다. 쿼리가 MySQL 엔진에 경고를 발생시키지 않고 설치된다고 말하면 충분합니다.