语法

[begin_label:] BEGIN
    [statement_list]
END [end_label]

解释说明

BEGIN ... END 主要用在复杂语法中,比如存储过程。一个复杂语句嵌套了 BEGIN and END ,并在其中包含各种类型的语句。每一个命令行都有一条或者多条sql语句,每个语句都以(;)结尾。BEGIN ... END中的命令行是可选项,所以命令行为空是合法的。

使用复杂语句需要客户端能够接受 (;),要在命令行客户端处理分隔符(;)。需要把(;)更改为(for example, to //) ,这样就可以在代码中添加(;)。更多信息请参考:mysql客户端的分隔符

如果在开始和结束位置都有开始和结束标志,那么这两个标志必须同名。

BEGIN ... END 结构可嵌套的。而且每一个代码块都可以定义自己代码块变量,如: CONDITIONs, HANDLERs and CURSORs等。不同代码块之间的变量名称可以重名。

声明顺序可以参考下面内容:

例子:

一个简单代码块:

CREATE PROCEDURE t()
BEGIN
	DECLARE x TINYINT UNSIGNED DEFAULT 1;
		BEGIN
			DECLARE x TINYINT UNSIGNED DEFAULT 2;
			DECLARE y TINYINT UNSIGNED DEFAULT 10;
			SELECT x, y;
		END;
	SELECT x;
END;

在这个例子中,外面代码块中声明了一个变量x,但是内部的代码块中又声明了一个变量X以及一个变量Y.在内部代码块的显示了X and Y 的值。但是在外面代码块中显示X的值,依然是原来的X的值,而不是内部代码块的值。而且最后代码块,不能显示y的值,因为y变量根本不存在。

Comments

Comments loading...