2013-05-10 142 views
0

我试图在update语句的参数中进行条件更改。 我收到以下错误,当我尝试以下功能Mysql错误:不允许从函数返回结果集

/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 

testpri.sql的内容如下:

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); 

我缺少什么?

回答

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胁迫SELECT语句返回其唯一列,行数,成intNMatches,局部变量强制转换为BIGINT。因为它包含商业秘密,我不能显示查询的其余部分,只要说这个查询安装时不会导致MySQL引擎发出警告。