0

我收到错误消息:#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 中,正在尝试为音乐数据库编写一些函数。如果用户选择特定流派(仅显示该流派中的专辑和艺术家)或者如果他们选择艺术家,反之亦然,我想写一个显示艺术家姓名、流派名称和专辑名称。

我想我会从简单的开始,根据他们选择的类型显示专辑名称。

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

  • 专辑:AlbumID、GenreID、ArtistID、AlbumName

  • 流派:流派 ID、流派名称

  • 艺术家:ArtistID、ArtistName

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

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

4

1 回答 1

0

函数接受一个值并返回一个值。函数的语法不需要知道参数的方向(输入或输出),因为逻辑上只有输入,但它确实需要知道返回内容的属性(由 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

您可能必须弄清楚您的商店的定义者是谁。

注意 - 如果每个流派 ID 有很多专辑,那么一个函数可能不是你想要的..

于 2017-04-28T08:36:11.870 回答