• Declare语句通常用来声明本地变量、游标、条件或者handler
• Declare语句只允许出现在begin … end语句中而且必须出现在第一行
• Declare的顺序也有要求,通常是先声明本地变量,再是游标,然后是条件和handler
delimiter // create procedure simpleproc (out param2 int) BEGIN declare n int default 10; select count(*) into param2 from students where sid>n; END; // delimiter ; delimiter // create procedure simpleproc (out param2 int) BEGIN select * from students; declare n int default 10; select count(*) into param2 from students where sid>n; END; // delimiter ; delimiter // create procedure simpleproc (out param2 int) BEGIN declare n int default 10; select * from students; select count(*) into param2 from students where sid>n; END; // delimiter ;
mysql> drop procedure simpleproc; Query OK, 0 rows affected (0.07 sec) mysql> delimiter // mysql> create procedure simpleproc (out param2 int) -> BEGIN -> declare n int default 10; -> select count(*) into param2 from students where sid>n; -> END; -> // Query OK, 0 rows affected (0.04 sec) mysql> delimiter ; mysql> call simpleproc(@b); Query OK, 1 row affected (0.01 sec) mysql> select @b; +------+ | @b | +------+ | 0 | +------+ 1 row in set (0.00 sec) mysql> select count(*) from students where sid>10; +----------+ | count(*) | +----------+ | 0 | +----------+ 1 row in set (0.01 sec) mysql> select n; ERROR 1054 (42S22): Unknown column 'n' in 'field list' mysql> drop procedure simpleproc; Query OK, 0 rows affected (0.15 sec) mysql> delimiter // mysql> create procedure simpleproc (out param2 int) -> BEGIN -> select * from students; -> declare n int default 10; -> select count(*) into param2 from students where sid>n; -> END; -> // ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'declare n int default 10; select count(*) into param2 from students where sid>n;' at line 4 mysql> delimiter ; mysql> delimiter // mysql> create procedure simpleproc (out param2 int) -> BEGIN -> declare n int default 10; -> select * from students; -> select count(*) into param2 from students where sid>n; -> END; -> // Query OK, 0 rows affected (0.03 sec) mysql> delimiter ;