我收到错误:#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行
答案 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有很多专辑,那么一个功能可能不是你想要的......