Mysql简单存储过程语法错误

时间:2018-03-27 08:44:57

标签: mysql stored-procedures

我在workbench中编写了一个简单的mysql存储过程,然而,它抱怨语法错误。我的语法出了什么问题?

CREATE DEFINER=`root`@`localhost` PROCEDURE `SelectIndicatorsByExistReferenceID`()
BEGIN
    select * from indicators;       
END

4 个答案:

答案 0 :(得分:0)

您最好发布错误消息,即使我能猜出您遇到的问题。

MySQL的默认分隔符是&#34 ;;"。因此,MySQL Workbench将以下声明视为完整声明:

CREATE DEFINER=`root`@`localhost` PROCEDURE `SelectIndicatorsByExistReferenceID`()
BEGIN
    select * from indicators;

这绝对错了!

因此,在编写程序时,您应该明确更改分隔符。这是一个例子:

delimiter //  -- change the delimiter temporarily
CREATE DEFINER=`root`@`localhost` PROCEDURE `SelectIndicatorsByExistReferenceID`()
BEGIN
    select * from indicators;       
END //
delimiter ;   -- restore the default delimiter

答案 1 :(得分:0)

查看此link以获取存储过程的简单示例。 对于您的问题:定义SP时,始终首先设置新的分隔符,以便在SP中使用常规分隔符(input[type='number'] { -moz-appearance:textfield; } input::-webkit-outer-spin-button, input::-webkit-inner-spin-button { -webkit-appearance: none; } )。如果你不这样做,SQL认为你在smicolon之后完成了你的查询,这不是你的查询的结尾,所以它会抛出一个错误。要设置新分隔符,请执行以下操作:

;

现在,您首先将分隔符设置为DELIMITER // CREATE DEFINER=`root`@`localhost` PROCEDURE `SelectIndicatorsByExistReferenceID`() BEGIN SELECT * FROM indicators; ... END // DELIMITER ; ,而sql只将simicolons存储在SP中。在//,您说您的查询已完成并输入END - 新的分隔符。然后将其设置回正常的simicolon,以便一如既往地继续。

答案 2 :(得分:-1)

使用此

DELIMITER $$

CREATE DEFINER=`root`@`locahost` PROCEDURE `SelectIndicatorsByExistReferenceID`()
BEGIN

SELECT * from indicators;

END $$

DELIMITER ;

答案 3 :(得分:-1)

DELIMITER $$

CREATE DEFINER=`root`@`locahost` PROCEDURE `SelectIndicatorsByExistReferenceID`()
BEGIN

SELECT * from indicators;

END $$

DELIMITER ;