在存储过程中动态添加值

时间:2019-02-09 14:56:02

标签: mysql sql database

我目前正在学习MySQL,并试图找出如何为输入值动态编码。

DELIMITER //

CREATE PROCEDURE add_user(
IN username VARCHAR (16),
IN pass VARCHAR (255),
IN email VARCHAR(255),
IN fname VARCHAR (32),
IN lname VARCHAR (32),
IN age INT )

BEGIN

INSERT INTO users (username, pass, email, fname, lname, age)

VALUES (@username, @pass, @email, @fname, @lname, @age);

INSERT INTO usershobbies (u_id, h_id)

VALUES (LAST_INSERT_ID(), '1');

END; //

DELIMITER ;

当我调用该过程并插入值时,出现错误消息:

call add_user('bugsbunny', 'Carrot1000', 'bugs@bunny.com', 'Bugs','Bunny', '80');
  

#1054-“字段列表”中的未知列“年龄”

感谢您的任何反馈。谢谢!

1 个答案:

答案 0 :(得分:0)

此错误告诉您表age中没有列users。您将需要检查表的定义(问题中未提供)。

此外,在MySQL中使用输入/输出参数时,不应在其前加上@作为前缀。我喜欢给他们一个字符串前缀(例如p_),以免与其他乱序字符串(例如列名)产生歧义:

CREATE PROCEDURE add_user(
    IN p_username VARCHAR (16),
    IN p_pass VARCHAR (255),
    IN p_email VARCHAR(255),
    IN p_fname VARCHAR (32),
    IN p_lname VARCHAR (32),
    IN p_age INT 
)    
BEGIN

    INSERT INTO users (username, pass, email, fname, lname)
        VALUES (p_username, p_pass, p_email, p_fname, p_lname);

    INSERT INTO usershobbies (u_id, h_id) VALUES (LAST_INSERT_ID(), '1');
END;