MySQL 函数:错误 #1064

MySQL Functions: Error #1064

我收到错误:#1064 - 您的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册,了解在第 1

行 'IN GenreID INT(11), OUT AlbumName VARCHAR(30)) BEGIN SELECT AlbumName INTO Na' 附近使用的正确语法

我的代码:

CREATE FUNCTION get_album_info_for_genre (IN GenreID INT(11), OUT AlbumName 
VARCHAR(30))
BEGIN
    SELECT AlbumName INTO NameOfAlbum FROM Albums WHERE GenreID=GenreID;
END 

我在 PhpMyAdmin 中,正在尝试为音乐数据库编写一些函数。我想写一个显示艺术家姓名、流派名称和专辑名称的程序,如果用户选择特定流派(仅显示该流派中的专辑和艺术家),或者他们选择艺术家,反之亦然。

我想我应该从简单的开始,根据他们选择的流派显示专辑名称。

如有必要,我的table结构是:

我尝试将 Na 的位置更改为其他内容,但我仍然遇到错误。 我也尝试更改定界符,但这也无济于事。请注意,默认情况下 phpmyadmin 有 ;作为分隔符。我尝试在顶部和底部添加 $$,但仍然出现错误 1064。出于某种原因,我找不到很多关于 mysql 函数的文章或视频。存储过程有很多,但我已经搜索了 4 天,我看到人们编写函数的唯一地方是在 Whosebug 上。我查看了几个出现此错误的问题,但尝试了一些解决方案,但仍然遗漏了一些明显的问题。

编辑 - 我尝试更改语法以删除 IN 和 OUT 并得到相同的错误但在不同的位置 - 在 'BEGIN 附近使用的语法 SELECT AlbumName INTO NameOfAlbum FROM Albums WHERE GenreID=GenreID' 在第 2 行

一个函数接受一个值,returns一个值。函数的语法不需要知道参数的方向(输入或输出),因为逻辑上只有一个输入,但它确实需要知道返回内容的属性(由 Returns 定义陈述)。函数中的 Return 语句完成代码并将变量传递给 Returns 语句,然后函数退出。所以这段代码应该编译。如果您是通过查询执行此操作,则将分隔符从 ; 更改为到 $$(不要忘记将其改回)。如果您是根据适当的例程选项卡键执行此操作。

CREATE DEFINER=`root`@`localhost` FUNCTION `get_album_info_for_genre`(`INGenreID` INT(11)) RETURNS VARCHAR(100) CHARSET latin1 
    NOT DETERMINISTIC 
    CONTAINS SQL 
    SQL SECURITY DEFINER 
    BEGIN Declare outs varchar(100); 
    SELECT AlbumName INTO outs FROM Albums WHERE GenreID=INGenreID; 
    RETURN outs; 
END

您可能需要弄清楚谁是您商店的定义者。

注意 - 如果每个 genreid 有很多专辑,那么函数可能不是您想要的..