MySQL:存储过程语法错误
Posted
技术标签:
【中文标题】MySQL:存储过程语法错误【英文标题】:MySQL: Stored Procedure Syntax Error 【发布时间】:2017-04-20 09:43:08 【问题描述】:我正在 phpmyadmin 中编写存储过程,但在 Update
语句附近出现语法错误。但是,如果我将更新语句放在我的 if 语句中,那么所有错误都会得到解决。
问:为什么外面的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 SET Name=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 ;
试试上面的代码。
希望对你有帮助。
【讨论】:
【参考方案2】:你忘了重新定义分隔符,试试这个:
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 ;
【讨论】:
以上是关于MySQL:存储过程语法错误的主要内容,如果未能解决你的问题,请参考以下文章