当使用内置的程序编辑器,MySQL工作台增加了一些额外的命令:
USE `test`; //
DROP procedure IF EXISTS `p2`; //
DELIMITER $$
USE `test`$$ //
CREATE PROCEDURE test.`p2`()
LANGUAGE SQL
DETERMINISTIC
COMMENT 'Adds "nson" to first and last names in the record.'
BEGIN
SELECT 'Hello World';
END $$
DELIMITER ; //
这些命令在不严格相关的存储过程的语法,它们仅仅是一种商品,其他MySQL客户端(如作为HeidiSQL或官方命令行工具)不会添加它们。最后的分隔符更改可能是重置,以避免将来的语句在同一连接上出现问题。
您需要更改分隔符以便指示客户端程序代码的开始和结束位置。问题是,过程体通常是SQL语句,省略符变化就使MySQL认为你正试图运行的一系列语句,其中第一个是这个集合:
CREATE PROCEDURE test.`p2`()
LANGUAGE SQL
DETERMINISTIC
COMMENT 'Adds "nson" to first and last names in the record.'
BEGIN
SELECT 'Hello World';
随着DELIMITER $$你告诉MySQL你的完整陈述从CREATE到END。它只是语法糖:DELIMITER甚至不是SQL关键字。例如,HeidiSQL提供了一个GUI,其中包含一个用于编写过程体的文本框,因此您不需要DELIMITER解决方法。