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结构是:
专辑:专辑 ID、流派 ID、艺术家 ID、专辑名称
流派:流派 ID、流派名称
艺术家:艺术家 ID、艺术家姓名
我尝试将 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 有很多专辑,那么函数可能不是您想要的..
我收到错误:#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结构是:
专辑:专辑 ID、流派 ID、艺术家 ID、专辑名称
流派:流派 ID、流派名称
艺术家:艺术家 ID、艺术家姓名
我尝试将 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 有很多专辑,那么函数可能不是您想要的..