【问题标题】:Inserting and selecting from a table with a stored procedure使用存储过程从表中插入和选择
【发布时间】:2013-01-02 10:19:44
【问题描述】:

我目前对正在参加的在线课程的目标有疑问。目标低于此,我使用的代码以及我收到的错误将低于此。

使用一个变量来编写一个名为“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'; 但这不起作用。

我想补充一点,它正在提取艺术家姓名和艺术家 ID,但没有将新行添加到专辑中。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    您可以在此使用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 ;
    

    【讨论】:

    • 对我的相册表进行了一些调整,我让它工作了。谢谢!
    【解决方案2】:

    请查看代码。其中有拼写错误。对于 NameOfArtist,varchar 的拼写错误。

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

    请尝试改正。

    【讨论】:

    • 谢谢!实际上,我在尝试调整代码时发现了它,但只是忘记在此处进行编辑。
    猜你喜欢
    • 2011-06-10
    • 2013-07-08
    • 1970-01-01
    • 1970-01-01
    • 2014-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多