我刚刚开始创建一个存储函数,这是我第一次这样,所以我遇到了一些问题。目前我使用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
答案 0 :(得分:4)
使用:
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长度与变量匹配,该变量应与要返回的列长度匹配。