使用 MySQL Workbench 的存储过程

bro*_*web 5 mysql stored-procedures delimiter

我对环境非常陌生,我对添加到代码末尾的一行有疑问。我遵循的指南是:

http://net.tutsplus.com/tutorials/an-introduction-to-stored-procedures/

如果有人对 MySQL 存储过程有更好的了解,我会全力以赴。

在我问之前,这是我使用的环境:操作系统:Windows 7 / WAMP (MySQL 5.5.24) / MySQL Workbench

我被指示定义一个分隔符;就我而言,我坚持使用默认的“$$”。

我创建的存储过程是:

DELIMITER $$
CREATE PROCEDURE test.`p2` ()
LANGUAGE SQL
DETERMINISTIC
COMMENT 'Adds "nson" to first and last names in the record.'
BEGIN
SELECT 'Hello World';
END $$
Run Code Online (Sandbox Code Playgroud)

当我应用这个存储过程并看到审查屏幕时,我看到添加了一行新代码;

在底部:

DELIMITER ;
Run Code Online (Sandbox Code Playgroud)

这条背阔线;添加它是因为 DELIMITER 语句宣布了一个块,在该块中可以使用定义的分隔符 ($$),从而最终关闭该块?

Álv*_*lez 4

当使用内置过程编辑器时,MySQL Workbench 添加了一些额外的命令:

\n\n
USE `test`; // <----------\nDROP procedure IF EXISTS `p2`;  // <----------\n\nDELIMITER $$\nUSE `test`$$ // <----------\nCREATE PROCEDURE test.`p2` ()\nLANGUAGE SQL\nDETERMINISTIC\nCOMMENT \'Adds "nson" to first and last names in the record.\'\nBEGIN\nSELECT \'Hello World\';\nEND $$\n\nDELIMITER ; // <----------\n
Run Code Online (Sandbox Code Playgroud)\n\n

这些命令与存储过程语法并不严格相关,它们只是一种商品\xe2\x80\x94其他MySQL客户端(例如HeidiSQL或官方命令行实用程序)不会添加它们。最后一次分隔符更改可能是重置,以避免同一连接上的未来语句出现问题。

\n\n

您需要更改分隔符以指示客户端过程代码的开始和结束位置。问题是过程主体通常是 SQL 语句的集合,因此省略分隔符更改将使 MySQL 认为您正在尝试运行一系列语句,其中第一个语句是:

\n\n
CREATE PROCEDURE test.`p2` ()\nLANGUAGE SQL\nDETERMINISTIC\nCOMMENT \'Adds "nson" to first and last names in the record.\'\nBEGIN\nSELECT \'Hello World\';\n
Run Code Online (Sandbox Code Playgroud)\n\n

您正在DELIMITER $$告诉 MySQL 您的完整语句从CREATEEND。它只是语法糖:DELIMITER甚至不是 SQL 关键字。例如,HeidiSQL 提供了一个带有文本框的 GUI,您可以在其中编写过程主体,因此您不需要 DELIMITER 解决方法。

\n