mySql 中创建过程的语法错误

Posted

技术标签:

【中文标题】mySql 中创建过程的语法错误【英文标题】:Syntax error in mySql to create Procedures 【发布时间】:2020-09-15 11:24:37 【问题描述】:
DELIMITER $$
DROP PROCEDURE IF EXISTS `unitstoamount`;
CREATE DEFINER=`root`@`localhost` PROCEDURE `unitstoamount`( IN units INT(14) , OUT result INT(14))
BEGIN

    DECLARE a INT(14) DEFAULT 0;
    DECLARE b INT(14) DEFAULT 0;
    DECLARE c INT(14) DEFAULT 0;

    SELECT twohundred FROM unitsRate INTO a ;
    SELECT fivehundred FROM unitsRate INTO b ;
    SELECT thousand FROM unitsRate INTO c  ;

    IF units<200
    then
        SELECT a*units INTO result;

    ELSEIF units<500
    then
        SELECT (a*200)+(b*(units-200)) INTO result;
    ELSEIF units > 500
    then
        SELECT (a*200)+(b*(300))+(c*(units-500)) INTO result;
    END IF;

END$$
DELIMITER ;

【问题讨论】:

变量赋值不用SELECT,使用SET result = a * units; 你得到什么错误? 你在手术前做了DELIMITER $$吗? 您可以将前三个选择合二为一:SELECT twohundred, fivehundred, thousand FROM unitsRate INTO a, b, c 为什么是一个过程?,这看起来更像一个函数。 【参考方案1】:

您已将 DELIMITER 设置为 $$。所以,你也应该在DROP PROCEDURE 语句中使用它:

DELIMITER $$
DROP PROCEDURE IF EXISTS `unitstoamount`
$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `unitstoamount`( IN units INT(14) , OUT result INT(14))
...

【讨论】:

以上是关于mySql 中创建过程的语法错误的主要内容,如果未能解决你的问题,请参考以下文章

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

在 MySQL/MariaDB 中创建存储过程时出错

如何在mysql数据库中创建一个包含请求的存储过程

当我尝试在 mysql 中创建触发器时出现语法错误

在 SQL Server Management Studio 中创建存储过程时出现语法错误

无法在 phpmyadmin 中创建程序