从具有存储过程的表中插入和选择

时间:2013-01-02 10:19:44

标签: mysql

我目前正在处理我正在进行的在线课程的目标问题。目标在此之下,我正在使用的代码以及我收到的错误将低于此。

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

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

2.使用步骤1中找到的ArtistID和AlbumName参数

将新行插入到相册中

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

CREATE PROCEDURE AddNewAlbum (
NameOfArtist varcahr(50),
AlbumName varchar(50)
)
BEGIN
SELECT ArtistID, ArtistName FROM Artists
WHERE ArtistName = 'NameOfArtist';

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

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

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

^我收到的错误。谁能看到我做错了什么?我尝试围绕WHERE ArtistName ='NameOfArtist'进行引用; 但这没用。

我想补充一点,它是拉艺术家名称和ArtistID,但没有将新行添加到相册。

2 个答案:

答案 0 :(得分:2)

您可以对此使用INSERT INTO...SELECT声明,

DELIMITER $
CREATE PROCEDURE AddNewAlbum 
(
    @NameOfArtist varchar(50),
    @AlbumName varchar(50)
)
BEGIN
    INSERT INTO Albums (ID, Title)
    SELECT  ArtistID, @AlbumName AS Title
    FROM    Artists
    WHERE   ArtistName = @NameOfArtist;
END $
DELIMITER ;

答案 1 :(得分:1)

请参阅代码。它有拼写错误。对于NameOfArtist,varchar的拼写错误。

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

请尝试纠正。