MySQL 存储过程 declare语句


• 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 ;

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM