程序失败但没有变量

时间:2015-09-19 10:36:29

标签: mysql

目前我正在与数据库合作,我得到了一个奇怪的错误wirth程序。我创建了一个获取VARCHAR类型的三个参数:title, interpret, album。这是代码:

BEGIN
    INSERT IGNORE INTO Interpret (Name) VALUES (interpret);
    SET @idInterpret := (SELECT id FROM Interpret WHERE Name = interpret);

    INSERT IGNORE INTO Album (Name, Interpret) VALUES (album, @idInterpret);
    SET @idAlbum := (SELECT id FROM Album WHERE Name = album AND Interpret = @idInterpret);

    INSERT INTO Lied (Name, Album, Interpret) VALUES (title, @idAlbum, @idInterpret);
END

如果我开始这个程序,我得到一个错误,说明专辑字段不能为空(这是正确的)但它不应该为空,因为我从上表中读取了值。如果我用真实数据(而不是变量程序)调用完全相同的SQL行,那么一切都很好。你知道为什么会这样吗?

2 个答案:

答案 0 :(得分:2)

避免将变量和参数命名为表的列。

在您的查询中:

SET @`idAlbum` := (SELECT `id`
                   FROM `Album`
                   WHERE `Name` = `album` AND `Interpret` = @`idInterpret`);

Interpret,您指的是表格的参数或列吗?我们知道这是列,MySQL解释是参数。

SQL Fiddle demo

请参阅:

在这种情况下,使用本地varibales跟随评论@ Bernd-Buffen。

答案 1 :(得分:0)

要在存储过程中使用变量,您必须 DECLARE 然后再使用它 可以使用它们没有引号。我已更改您的查询,但未进行测试。

BEGIN
    DECLARE idInterpret DEFAULT ='';
    DECLARE idAlbum     DEFAULT ='';

    INSERT IGNORE INTO Interpret (Name) VALUES (interpret);
    SELECT id IN TO idInterpret FROM Interpret WHERE Name = interpret;

    INSERT IGNORE INTO Album (Name, Interpret) VALUES (album, idInterpret);
    SELECT id INTO idAlbum FROM Album WHERE Name = album AND Interpret = idInterpret;

    INSERT INTO Lied (Name, Album, Interpret) VALUES (title, idAlbum, idInterpret);
END