存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行。
存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数、输出参数、返回单个或多个结果集以及返回值。
创建存储过程用法
delimiter KaTeX parse error: Expected 'EOF', got '#' at position 2: #̲#转换结束符 create p… #执行结束
delimiter ; # 把结束符换回来
参数列表
(1)接受无参数
(2)IN 输入参数
(3)OUT 输出参数
(4)INOUT 输入输出参数
无参数
\d $$
create procedure p2()
begin
declare i int default 1;
while(i<=20000) do insert into t1 values(i,md5(i));
set i=i+1;
end while;
end
$$
\d;
call p1();#调用p1
in
mysql> \d $$
mysql> create procedure p3(in a int)
-> declare i int default 1
-> \d $$^C
mysql> \d $$
mysql> create procedure p3(in a int)
-> begin
-> declare i int default 1;
-> while(i<=a)do insert into t1 values(i,md5(i));
-> set i=i+1;
-> end while;
-> end
-> $$
Query OK, 0 rows affected (0.01 sec)
mysql> \d ;
mysql> call p3(4);
Query OK, 1 row affected (0.01 sec)
out
mysql> \d $$
mysql> create procedure p4(out a int)
-> begin
-> select count(姓名) into a from students;
-> end;
-> $$
Query OK, 0 rows affected (0.00 sec)
mysql> \d ;
mysql> select @b; #对b没有任何定义
+------+
| @b |
+------+
| NULL |
+------+
1 row in set (0.00 sec)
mysql> call p4(@b);#用@b来接受输出的值
Query OK, 1 row affected (0.00 sec)
mysql> select @b;
+------+
| @b |
+------+
| 22 |
+------+
1 row in set (0.00 sec)
对@b的解析:
mysql> set @num=20; ## 定义一个用户会话变量
mysql> select @num; ## 调用一个用户会话变量
+------+
| @num |
+------+
| 20 |
inout
mysql> delimiter $$
mysql> create procedure p5(IN p1 varchar(50), OUT p2 int)
-> BEGIN
-> select count(*) into p2 from company.employee5 where post=p1;
-> END$$
Query OK, 0 rows affected (0.00 sec)
mysql> \d ;
mysql> call p5('hr',@a);
mysql>select @a;