MySQL函数:错误#1064

时间:2017-04-27 22:38:42

标签: mysql mysql-error-1064 mysql-function

我收到错误:#1064 - 您的SQL语法出错了;检查与您的MySQL服务器版本相对应的手册,以便在“GenreID INT(11),OUT AlbumName VARCHAR(30)”附近使用正确的语法.BEGIN SELECT AlbumName INTO Na'在第1行

我的代码:

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

  • 类型:GenreID,GenreName

  • 艺术家:ArtistID,ArtistName

我尝试将Na更改为其他地方,但我仍然遇到错误。 我也试过更换挡板,但这也没有帮助。请注意,phpmyadmin默认具有;作为界限。我尝试在顶部和底部添加$$但我仍然得到错误1064.由于某种原因,我无法在mysql函数上找到很多文章或视频。存储过程有很多,但我搜索了4天,我看到人们编写函数的唯一地方就是stackoverflow。我查看了一些出现此错误的问题,但尝试了一些解决方案,但仍然缺少一些明显的问题。

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

1 个答案:

答案 0 :(得分:0)

函数接受一个值并返回一个值。函数的语法不需要知道参数的方向(in或out),因为逻辑上只有in,但它确实需要知道返回的属性(由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有很多专辑,那么一个功能可能不是你想要的......