【问题标题】:MySQL Functions: Error #1064MySQL 函数:错误 #1064
【发布时间】:2017-04-27 22:38:41
【问题描述】:

我收到错误消息:#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 并得到相同的错误,但在不同的位置 - 在 'BEGIN 附近使用的语法 SELECT AlbumName INTO NameOfAlbum FROM Albums WHERE GenreID=GenreID' at line 2

【问题讨论】:

  • 与表列同名的参数不是一个好主意。

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


【解决方案1】:

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

【讨论】:

  • 当我运行时,我得到:#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在第 5 行的 '' 附近使用
猜你喜欢
  • 2011-02-11
  • 2015-07-03
  • 1970-01-01
  • 2013-11-13
  • 1970-01-01
  • 2012-01-27
  • 2011-04-17
  • 2014-02-20
  • 1970-01-01
相关资源
最近更新 更多