MySQL:错误代码:1064。创建过程时

时间:2015-05-13 02:05:19

标签: mysql stored-procedures

我找不到如何解决我的问题, 这是我的代码:

DELIMITER //
CREATE procedure SP_INS_fbUSER
    (v_email varchar(50), v_password varchar(20), v_first_name Nvarchar(20),
    v_last_name Nvarchar(20), v_full_name Nvarchar(50), v_profile_pic_arr text)
BEGIN 
    IF(exists(SELECT * FROM USER WHERE email = v_email)) then
        BEGIN
            INSERT INTO USER 
            (email,password,first_name,last_name,full_name,active,profile_pic_arr) 
            VALUES 
            (v_email,v_password,v_first_name,v_last_name,v_full_name,TRUE,v_profile_pic_arr);
    END IF;
end;
DELIMITER ; 

以下是错误消息:

  

错误代码:1064。您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第10行附近使用正确的语法

第10行有什么问题以及如何解决?

我试过这段代码:

DELIMITER //
CREATE procedure SP_INS_fbUSER
    (v_email varchar(50), v_password varchar(20), v_first_name Nvarchar(20),
    v_last_name Nvarchar(20), v_full_name Nvarchar(50), v_profile_pic_arr text)
BEGIN 
    IF(exists(SELECT * FROM USER WHERE email = v_email)) then
        BEGIN
            INSERT INTO USER 
            (email,password,first_name,last_name,full_name,active,profile_pic_arr) 
            VALUES 
            (v_email,v_password,v_first_name,v_last_name,v_full_name,TRUE,v_profile_pic_arr);
        END
--------^
    END IF;
end;
DELIMITER ;

但是仍然显示相同的错误。 然后我尝试这段代码:

DELIMITER //

CREATE procedure SP_INS_fbUSER
    (v_email varchar(50), v_password varchar(20), v_first_name Nvarchar(20),
    v_last_name Nvarchar(20), v_full_name Nvarchar(50), v_profile_pic_arr text)
BEGIN 
    IF(exists(SELECT * FROM `USER` WHERE `email` = v_email)) then
        BEGIN
            INSERT INTO `USER` 
            (`email`,`password`,`first_name`,`last_name`,`full_name`,`active`,`profile_pic_arr`) 
            VALUES 
            (v_email,v_password,v_first_name,v_last_name,v_full_name,TRUE,v_profile_pic_arr);
        END
    END IF;
END//

DELIMITER ;

它显示:

  

错误代码:1064。您的SQL语法出错;
  检查与您的MySQL服务器版本对应的手册,以便在'END IF附近使用正确的语法;   结束'第12行

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

END

您没有BEGIN
DELIMITER //
CREATE procedure SP_INS_fbUSER
    (v_email varchar(50), v_password varchar(20), v_first_name Nvarchar(20),
    v_last_name Nvarchar(20), v_full_name Nvarchar(50), v_profile_pic_arr text)
BEGIN 
    IF(exists(SELECT * FROM USER WHERE email = v_email)) then
        BEGIN
            INSERT INTO USER 
            (email,password,first_name,last_name,full_name,active,profile_pic_arr) 
            VALUES 
            (v_email,v_password,v_first_name,v_last_name,v_full_name,TRUE,v_profile_pic_arr);
        END
--------^
    END IF;
end//
DELIMITER ; 

答案 1 :(得分:0)

试试这个:

DELIMITER //

CREATE procedure SP_INS_fbUSER
    (v_email varchar(50), v_password varchar(20), v_first_name Nvarchar(20),
    v_last_name Nvarchar(20), v_full_name Nvarchar(50), v_profile_pic_arr text)
BEGIN 
    IF (EXISTS(SELECT * FROM `USER` WHERE `email` = v_email)) THEN
       INSERT INTO `USER` 
            (`email`,`password`,`first_name`,`last_name`,`full_name`,`active`,`profile_pic_arr`) 
          VALUES 
            (v_email,v_password,v_first_name,v_last_name,v_full_name,TRUE,v_profile_pic_arr);
    END IF;
END //

DELIMITER ;