在存储过程中设置参数会引发错误

时间:2018-10-12 10:50:39

标签: mysql stored-procedures

我正在尝试使用以下stored_procedure代码创建一个sql

INSERT INTO users (name,surname,email,phone,address_id)
VALUES (name,surname,email,phone,address_id);

SET @GeneratedUserID = LAST_INSERT_ID();

INSERT INTO user_login (username,password_salt,hash_code,users_user_id)
VALUES (username,password_salt,hash_code,@GeneratedUserID );

INSERT INTO user_roles (user_id,role_id)
VALUES (@GeneratedUserID ,1);

但是,我遇到一个错误:

MySQL said: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET @GeneratedUserID = LAST_INSERT_ID(); INSERT INTO user_login (username,pas' at line 4

1 个答案:

答案 0 :(得分:2)

您很可能没有更改定界符,但是不能确定,因为您没有发布整个代码(请始终这样做)。因此,MySQL认为该过程在第一个;之后完成。

您的过程应如下所示:

delimiter $$
create procedure x(in p_param1 int, in p_param2 int)
begin
    statement1;
    statement2;
end$$
delimiter ;

还请注意,您应该选择与列名不同的参数名。最佳做法是使用诸如p_之类的前缀。变量相同。使用诸如v_之类的前缀。