【问题标题】:MySQL create procedure declare variable issuesMySQL 创建过程声明变量问题
【发布时间】:2013-01-14 07:38:08
【问题描述】:

几天前我曾就此寻求帮助,但没有得到答复。或任何cmets。 如果我变得烦人,我深表歉意,我只是想利用我可用的渠道来完成我的课堂作业。

使用一个变量来编写一个名为“AddNewAlbum”的过程。此过程至少需要两个参数 - NameOfArtist 和 AlbumName。该程序将:

1.从 Artist 表中查找 ArtistID,其中艺术家名称为 NameOfArtist

2. 使用第 1 步中找到的 ArtistID 和 AlbumName 参数在专辑中插入新行

现在可以安全地假设艺术家在您运行此过程之前存在(这意味着如果您调用 AddNewAlbum ('Bob Dylan', 'Street Legal');那么“Bob Dylan”已经存在于 Artist 表中。

这就是我需要做的 ^

CREATE PROCEDURE AddNewAlbum (
NameOfArtist varchar(50),
AlbumName varchar(50)
)
BEGIN

DECLARE artist_id varchar(50);

SELECT ArtistID into artist_id
FROM Artists
WHERE ArtistName = NameOfArtist;

INSERT INTO Albums (Title)
VALUES (AlbumName);
END;
//

call AddNewAlbum (
"Bob Dylan",
"Street Legal"
);
//

错误 1364 (HY000):字段“ArtistID”没有默认值

那是返回的错误。我尝试用其他几种方式编写此代码,但返回相同的错误。

【问题讨论】:

  • 为什么你用两个参数"Bob Dylan", "Street Legal"调用这个过程,而它只有一个参数NameOfArtist varchar(50)
  • 哦,对不起,应该说。 CREATE PROCEDURE AddNewAlbum ( NameOfArtist varchar(50), AlbumName varchar(50) 等等我会很快编辑的。
  • 为什么 artist_id 是 varchar(50) ?

标签: mysql mysql-error-1364


【解决方案1】:

试试这个。添加了一个默认值并稍微更新您的过程以匹配输入

CREATE PROCEDURE AddNewAlbum (
NameOfArtist varchar(50),
AlbumName varchar(50)
)
BEGIN

DECLARE artist_id INT DEFAULT 0;

SELECT ArtistID into artist_id
FROM Artists
WHERE ArtistName = NameOfArtist;

INSERT INTO Albums (ArtistID, Title)
VALUES (artist_id, AlbumName);
END;
//

call AddNewAlbum (
"Bob Dylan",
"Street Legal"
);
//

【讨论】:

  • 谢谢你,蒂克斯。我刚用过这个,看起来它工作正常。我认为这是一个简单的问题,但我无法弄清楚。我很感激。
猜你喜欢
  • 2016-07-19
  • 2015-08-19
  • 2011-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多