我正在尝试使用以下代码在我的mysql数据库中创建存储过程。我收到错误。请帮我解决
我的MySQl版本是5.0.51b
CREATE PROCEDURE tv_insert_user(IN firstName VARCHAR(25),
IN lastName VARCHAR(25), IN emailId VARCHAR(22),IN countryId INT,IN stateId INT)
BEGIN
INSERT INTO tv_user_master(FIRST_NAME,LAST_NAME,EMAIL,COUNTRY_ID,STATE_ID) VALUES(firstName,lastName,lname,emailId,countryId,stateId)
END
ERROR:
错误代码:1064 您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第5行的“END”附近使用正确的语法 (0毫秒)
答案 0 :(得分:5)
lname-thing不是错误消息的内容。您需要指定不同的分隔符。 MySQL命令的默认分隔符是分号,但分号在语句末尾的存储过程中使用。在此示例中,我将分隔符更改为//,并使用它来结束过程。这允许我在块内使用分号。
DELIMITER //
CREATE PROCEDURE tv_insert_user(IN firstName VARCHAR(25),
IN lastName VARCHAR(25), IN emailId VARCHAR(22),IN countryId INT,IN stateId INT)
BEGIN
INSERT INTO tv_user_master(FIRST_NAME,LAST_NAME,EMAIL,COUNTRY_ID,STATE_ID) VALUES(firstName,lastName,emailId,countryId,stateId);
END;
//
DELIMITER ;
一旦解决了分隔符位,您可能会收到有关INSERT命令和额外属性(lastname两次)的错误。
答案 1 :(得分:1)
值列表中有一个额外的变量
CREATE PROCEDURE tv_insert_user(IN firstName VARCHAR(25), IN lastName VARCHAR(25), IN emailId VARCHAR(22),IN countryId INT,IN stateId INT)
BEGIN
INSERT INTO tv_user_master(FIRST_NAME,LAST_NAME,EMAIL,COUNTRY_ID,STATE_ID)
VALUES(firstName,lastName,lname,emailId,countryId,stateId)
^^^^^^
END
尝试删除并查看是否仍然出现错误,如果尚未更改分隔符。
答案 2 :(得分:0)
正如sfossen所说,删除lname
另外,在插入的末尾添加一个分号:
CREATE PROCEDURE tv_insert_user(IN firstName VARCHAR(25), IN lastName VARCHAR(25), IN emailId VARCHAR(22),IN countryId INT,IN stateId INT)
BEGIN
INSERT INTO tv_user_master(FIRST_NAME,LAST_NAME,EMAIL,COUNTRY_ID,STATE_ID) VALUES(firstName,lastName,emailId,countryId,stateId);
END