标签:
1. 在复合语句中声明变量的指令是DECLARE:
1 CREATE PROCEDURE p8 () 2 BEGIN 3 DECLARE a INT; 4 DECLARE b INT; 5 SET a = 5; 6 SET b = 5; 7 INSERT INTO t VALUES (a); 8 SELECT s1 * a FROM t WHERE s1 >= b; 9 END; //
在过程中定义的变量并不是真正的定义,只是在BEGIN/END块内定义而已(类似形参数).注意与会话变量的区别,不能使用@.变量一旦声明,就可以在任何能使用会话变量,文字,列表的地方使用变量
2. 无初始化子句及SET初始化:
1 CREATE PROCEDURE p9 () 2 BEGIN 3 DECLARE a INT /* there is no DEFAULT clause */; 4 DECLARE b INT /* there is no DEFAULT clause */; 5 SET a = 5; /* there is a SET statement */ 6 SET b = 5; /* there is a SET statement */ 7 INSERT INTO t VALUES (a); 8 SELECT s1 * a FROM t WHERE s1 >= b; 9 END; //
有很多变量的方法,如果没有设置默认值,则变量为NULL,可以在任何时候使用SET语句给变量赋值.
3. 含有DEFAULT子句的例子:
可以用DEFAULT子句在声明的同时指定初始值
1 CREATE PROCEDURE p10 () 2 BEGIN 3 DECLARE a, b INT DEFAULT 5; 4 INSERT INTO t VALUES (a); 5 SELECT s1 * a FROM t WHERE s1 >= b; 6 END; //
4. Scope 作用域
1 CREATE PROCEDURE p11 () 2 BEGIN 3 DECLARE x1 CHAR(5) DEFAULT ‘outer‘; 4 BEGIN 5 DECLARE x1 CHAR(5) DEFAULT ‘inner‘; 6 SELECT x1; 7 END; 8 SELECT x1; 9 END; //
关于作用域,上例中有嵌套的BEGIN/END块,内外两个块都有一个名为x1.内部的变量在其作用域内享有更高的优先权.执行到内部END,内部变量消失.因此,在过程外也不能使用这个声明了的变量.
标签:
原文地址:http://www.cnblogs.com/free-coder/p/4774336.html