MySql 存储过程(procedure)实例

落日映苍穹つ 2022-02-03 08:51 420阅读 0赞

1.声明变量

  1. delimiter $$
  2. create procedure p2()
  3. begin
  4. declare age int default 0;
  5. declare height int default 160;
  6. select concat('年龄是', age, '身高是',height);
  7. end $$
  8. delimiter ;

执行结果

  1. mysql> call p2();
  2. +----------------------------------------------+
  3. | concat('年龄是', age, '身高是',height) |
  4. +----------------------------------------------+
  5. | 年龄是0身高是160 |
  6. +----------------------------------------------+
  7. 1 row in set (0.00 sec)

2.运算

  1. delimiter $$
  2. create procedure p3()
  3. begin
  4. declare age int default 0;
  5. set age := age+20;
  6. select concat('年龄是', age);
  7. end $$
  8. delimiter ;

执行结果

  1. mysql> call p3();
  2. +--------------------------+
  3. | concat('年龄是', age) |
  4. +--------------------------+
  5. | 年龄是20 |
  6. +--------------------------+
  7. 1 row in set (0.00 sec)

3.传参数

3.1 输入参数

  1. delimiter $$
  2. create procedure p4(in age int)
  3. begin
  4. if age >= 18 then
  5. select concat(age,'是年富力强');
  6. else
  7. select concat(age,'是风华正茂');
  8. end if;
  9. end $$
  10. delimiter ;

执行结果

  1. mysql> call p4(20);
  2. +-------------------------------+
  3. | concat(age,'是年富力强') |
  4. +-------------------------------+
  5. | 20是年富力强 |
  6. +-------------------------------+
  7. 1 row in set (0.00 sec)

3.2 输出参数

  1. delimiter $$
  2. create procedure p6(out sum int)
  3. begin
  4. set sum := 18;
  5. end $$
  6. delimiter ;

执行结果

  1. mysql> call p6(@age);
  2. Query OK, 0 rows affected (0.00 sec)
  3. mysql> select @age;
  4. +------+
  5. | @age |
  6. +------+
  7. | 18 |
  8. +------+
  9. 1 row in set (0.00 sec)

3.3输入输出参数

  1. delimiter $$
  2. create procedure p7(inout age int)
  3. begin
  4. set age := age+20;
  5. end $$
  6. delimiter ;

执行结果

  1. mysql> set @age=18;
  2. Query OK, 0 rows affected (0.00 sec)
  3. mysql> call p7(@age);
  4. Query OK, 0 rows affected (0.00 sec)
  5. mysql> select @age;
  6. +------+
  7. | @age |
  8. +------+
  9. | 38 |
  10. +------+
  11. 1 row in set (0.00 sec)

4.while循环

  1. delimiter $$
  2. create procedure p5(in num int)
  3. begin
  4. declare sum int default 0;
  5. declare i int default 0;
  6. while i<= num do
  7. set sum := sum+i;
  8. set i = i+1;
  9. end while;
  10. select concat('sum = ',sum);
  11. end $$
  12. delimiter ;

执行结果

  1. mysql> call p5(100);
  2. +----------------------+
  3. | concat('sum = ',sum) |
  4. +----------------------+
  5. | sum = 5050 |
  6. +----------------------+
  7. 1 row in set (0.00 sec)

5.case语句

  1. delimiter $$
  2. create procedure p8(in type int)
  3. begin
  4. case type
  5. when 1 then select '墙';
  6. when 2 then select '梁';
  7. when 3 then select '板';
  8. when 4 then select '板';
  9. else select '未知类型';
  10. end case;
  11. end $$
  12. delimiter ;

执行结果

  1. mysql> call p8(3);
  2. +-----+
  3. | |
  4. +-----+
  5. | |
  6. +-----+
  7. 1 row in set (0.00 sec)

6.repeat循环

  1. delimiter $$
  2. create procedure p9(in num int)
  3. begin
  4. declare i int default 0;
  5. declare sum int default 0;
  6. repeat
  7. set i := i+1;
  8. set sum := sum+i;
  9. until i>=num end repeat;
  10. select concat('sum = ',sum);
  11. end $$
  12. delimiter ;

执行结果

  1. mysql> call p9(100);
  2. +----------------------+
  3. | concat('sum = ',sum) |
  4. +----------------------+
  5. | sum = 5050 |
  6. +----------------------+
  7. 1 row in set (0.00 sec)

发表评论

表情:
评论列表 (有 0 条评论,420人围观)

还没有评论,来说两句吧...

相关阅读