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:存储过程语法错误的主要内容,如果未能解决你的问题,请参考以下文章

试图在 Mysql 中创建存储过程的语法错误?

MySQL存储过程语法错误:if else

Liquibase:MySQL 存储过程中的 SQL 语法错误

游标选择的 MySQL 存储过程语法错误

这个 MySQL 存储过程中的语法错误在哪里?

MySQL 5.7 存储过程语法错误,通过 phpadmin 和 Ubuntu 16.04