0

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

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

我错过了什么?

4

2 回答 2

2

I think it's actually your debugging SELECT calls.

From the 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...

于 2013-05-11T01:56:51.973 回答
0

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

考虑以下代码段。

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

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

于 2018-03-04T19:58:45.763 回答