2017-04-20 155 views
0

我在phpmyadmin中编写存储过程,但我在Update语句附近收到语法错误。但是如果我在我的if语句中放入更新语句,而不是所有错误都已解决。MySQL:存储过程语法错误

问:为什么update语句会导致错误?

CREATE DEFINER=`root`@`localhost` PROCEDURE `tbl_people_update`(IN `p_Id` INT, IN `p_Name` VARCHAR(150), IN `p_Mobile_Number` VARCHAR(100)) 
    IF CHAR_LENGTH(p_Mobile_Number) <= 0 THEN 
    SET p_Mobile_Number = '12345'; 
    END IF; 

    UPDATE tbl_people 
    SET 
    Name=p_Name, 
    Mobile_Number = p_Mobile_Number 
    WHERE 
    Id=p_Id; 

的错误如下:

#1064 - 你在你的SQL语法错误;检查对应于您MariaDB的服务器版本正确的语法使用 附近“UPDATE tbl_people集名称= p_Name,MOBILE_NUMBER = p_Mobile_Number WHER”第5行

回答

1
DELIMITER $$ 
CREATE DEFINER=`root`@`localhost` PROCEDURE `tbl_people_update`(IN `p_Id` INT, IN `p_Name` VARCHAR(150), IN `p_Mobile_Number` VARCHAR(100)) 
BEGIN 
    IF CHAR_LENGTH(p_Mobile_Number) <= 0 THEN 
    SET p_Mobile_Number = '12345'; 
    END IF; 
    UPDATE tbl_people 
    SET 
    Name=p_Name, 
    Mobile_Number = p_Mobile_Number 
    WHERE 
    Id=p_Id; 
END$$ 
DELIMITER ; 

试试上面的代码。

希望这会帮助你。

1

你忘了重新定义分隔符的使用说明书,试试这个:

delimiter || 
CREATE DEFINER=`root`@`localhost` PROCEDURE `tbl_people_update`(IN `p_Id` INT, IN `p_Name` VARCHAR(150), IN `p_Mobile_Number` VARCHAR(100)) 
    IF CHAR_LENGTH(p_Mobile_Number) <= 0 THEN 
    SET p_Mobile_Number = '12345'; 
    END IF; 

    UPDATE tbl_people 
    SET 
    Name=p_Name, 
    Mobile_Number = p_Mobile_Number 
    WHERE 
    Id=p_Id; 
|| 
delimiter ;