MySql存储过程创建错误

时间:2009-04-08 07:08:17

标签: mysql stored-procedures

我正在尝试使用以下代码在我的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毫秒)

3 个答案:

答案 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