2013-02-04 33 views
4

对于环境来说很新颖,我对添加到代码末尾的一行有个疑问。我下面的指南:使用MySQL Workbench的存储过程

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

如果任何人有关于MySQL存储过程的更好的,我所有的耳朵。

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

我指示定义一个分隔符;在我的情况下,我坚持默认的'$$'。

我创建的存储过程是:

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语句宣布一个块,在该块中可以使用定义的分隔符($$),并最终关闭该块?

回答

2

当使用内置的程序编辑器,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你的完整陈述从CREATEEND。它只是语法糖:DELIMITER甚至不是SQL关键字。例如,HeidiSQL提供了一个GUI,其中包含一个用于编写过程体的文本框,因此您不需要DELIMITER解决方法。

+1

感谢您确认我的假设Alvaro。 – brooklynsweb

+0

为防万一初学者从头开始寻找教程,以下是MYSQL WOrkbench中SP的有用教程:https://www.youtube.com/watch?v = WdievoP6570 –