5

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

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 $$

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

在底部:

DELIMITER ;

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

4

1 回答 1

4

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

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

于 2013-02-04T17:15:33.860 回答