mysql存储函数参数

Ell*_*ott 6 mysql sql stored-functions

我刚刚开始创建存储函数,这是我第一次,所以我遇到了一些问题。SELECT test();目前我使用(测试是现在的函数名称)调用该函数。我想向函数发送一个数字(用户名 ID)并返回用户名。

我通过使用SELECT test(1);1 来实现此目的,即表中用户的 ID。这似乎有效,因为返回了用户名,但如果我输入任何数字,也会返回相同的用户名。

BEGIN 

 DECLARE new_username VARCHAR(90);    

    SELECT `username` INTO  new_username FROM `users` WHERE `ID` = ID;

 return new_username;
END
Run Code Online (Sandbox Code Playgroud)

我已将参数设置为ID int

我是否正确地认为关键字INTO会将用户名的值放入变量中new_username?如果我在没有的情况下运行它,INTO我会收到错误:

不允许从函数返回结果集

我在这方面有没有犯过任何明显的错误,我希望我没有完全错误。感谢您的任何建议:)。

编辑:我刚刚在表中添加了几行,现在收到错误:

结果包含多行

完整的sql版本:

CREATE DEFINER=`elliotts`@`%` FUNCTION `test`(ID int) 
RETURNS varchar(32) CHARSET latin1
BEGIN 

    DECLARE new_username VARCHAR(32);

    SELECT `username` 
      INTO new_username 
      FROM `users` 
     WHERE `ID` = ID;

    return new_username;

END
Run Code Online (Sandbox Code Playgroud)

OMG*_*ies 6

使用:

DROP FUNCTION IF EXISTS `example`.`test` $$
CREATE FUNCTION `example`.`test` (param INT) RETURNS VARCHAR(32)
BEGIN

  DECLARE new_username VARCHAR(32);

    SELECT `username`
      INTO new_username
      FROM `users`
     WHERE `ID` = param;

    RETURN COALESCE(new_username, 'Username not found');

END $$
Run Code Online (Sandbox Code Playgroud)

请注意,RETURN 值的 VARCHAR 长度与变量匹配,该变量应与要返回的列长度匹配。