我在Workbench中编写一个简单的MySQL存储过程,但是,它抱怨语法错误。我的语法怎么了?
CREATE DEFINER=`root`@`localhost` PROCEDURE `SelectIndicatorsByExistReferenceID`()
BEGIN
select * from indicators;
END
查看此链接以获取存储过程的简单示例。提出问题:定义SP时,您始终从设置新的定界符开始,以便在SP中使用普通定界符(;
(。如果您不这样做,SQL会认为您在Smicolon之后完成了查询,这不是在查询结束时,因此会引发错误。要设置新的定界符,请执行以下操作:
DELIMITER //
CREATE DEFINER=`root`@`localhost` PROCEDURE `SelectIndicatorsByExistReferenceID`()
BEGIN
SELECT * FROM indicators;
...
END //
DELIMITER ;
现在,您首先将定界符设置为//
,而SQL仅将Simicolons存储在您的SP中。在END
上,您说查询已经完成并键入//
-新定界符。然后,您将其设置回正常的Simicolon,以一如既往地继续。
您最好发布错误消息,即使我可以猜测您正在遭受的问题。
mySQL的默认定界符是";"。因此,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
DELIMITER $$
CREATE DEFINER=`root`@`locahost` PROCEDURE `SelectIndicatorsByExistReferenceID`()
BEGIN
SELECT * from indicators;
END $$
DELIMITER ;
使用此
DELIMITER $$
CREATE DEFINER=`root`@`locahost` PROCEDURE `SelectIndicatorsByExistReferenceID`()
BEGIN
SELECT * from indicators;
END $$
DELIMITER ;