Mysql-----存储过程

存储过程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; 

猜你喜欢

转载自blog.csdn.net/wana_one_gy/article/details/82714652