Mysql错误:不允许从函数返回结果集

时间:2013-05-10 23:35:33

标签: mysql sql function stored-functions mysql-error-1415

我正在尝试对update语句的参数进行条件更改。 我尝试以下功能时出现以下错误

/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 个答案:

答案 0 :(得分:2)

我认为这实际上是您的调试SELECT来电。

来自docs

  

返回结果集的语句可以在存储过程中使用,但不能在存储的函数中使用。此禁止包括没有INTO var_list子句的SELECT语句...

答案 1 :(得分:0)

我找到了同一个问题的答案,并找到了解决这个问题的另一种方法,这样我就可以使用SELECT语句,它是引发警告的MySQL函数的核心和灵魂。

请考虑以下代码段。

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

SET强制SELECT语句将其唯一的列(行计数)返回到intNMatches,这是一个转换为BIGINT的局部变量。由于它包含商业机密,我无法显示查询的其余部分。可以说,查询安装时不会导致MySQL引擎发出警告。