【问题标题】:mysql stored function parametermysql存储函数参数
【发布时间】:2010-10-19 15:31:01
【问题描述】:

我刚刚开始创建一个存储函数,这是我的第一次,所以我遇到了一些问题。目前我使用SELECT test(); 调用该函数(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

我已将参数设置为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

【问题讨论】:

    标签: sql mysql stored-functions


    【解决方案1】:

    用途:

    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 $$
    

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

    【讨论】:

    • 谢谢我试过了,但得到错误:无法从另一个存储的例程中创建函数
    • @Elliot:在单独的脚本选项卡中执行代码——不知何故,您设法将其粘贴到现有函数/存储过程声明中。
    • @Elliot:如果用户名为 NULL,你想做什么?您是否意识到,如果有人使用表中不存在的参数值运行函数,则返回值也将为 NULL?
    • 是的,我正在检查它是否不存在,那么 new_username 将等于 "Username not found" 。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    • 2012-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多