mysql 存储过程和函数中光标的使用

在存储过程和函数中,可以使用光标对结果集进行循环的处理。

光标的使用包括光标的生命、OPEN、fetch、和close,其语法如下:

1、声明光标:

 declare 光标名 cursor for select_statement(查询语句)

2、open光标:

 open 光标名

3、fetch 光标

fetch 光标名 into  变量名...;

4、close光标

close 光标名

以下例子是一个简单的使用光标的过程,对payment 表按照行进行循环的处理,按照staff_id 值的不同累加 amount的值,

判断循环结束的条件是捕获not found 的条件,当fetch 光标找不到下一条记录的时候,就会关闭光标然后推出过程。

CREATE DEFINER=`root`@`::1` PROCEDURE `payment_stat`()
begin
   declare i_staff_id int; //定义变量
    declare d_amount decimal(5,2);//定义变量
   declare cur_payment cursor for select staff_id,amount from payment;//定义光标的声明
   declare exit handler for not found close cur_payment;//处理程序的声明

  set  @x1=0;
  set  @x2=0;

  open cur_payment;
 repeat 
  fetch cur_payment into i_staff_id,d_amount;
    if i_staff_id =2 then
      set @x1 = @x1 + d_amount;
    else
      set @x2 = @x2 + d_amount;
    end if;
 until 0 end repeat;
 close cur_payment;

end

payment中staff_id和amount 的部分值如下,方便理解光标的作用。

      1 |   4.99 |
      2 |   4.99 |
      2 |   0.99 |
      2 |   3.99 |
      2 |   6.99 |
      2 |   0.99 |
      1 |   0.99 |
      2 |   0.99 |
      1 |   5.99 |
      1 |   4.99 |
      1 |   4.99 |
      2 |   0.99 |
      2 |   2.99 |
      2 |   0.99 |
      2 |   2.99 |
      1 |   7.99 |
      2 |   4.99 |
      1 |   1.99 |
      2 |   6.99 |
      2 |   4.99 |
      1 |   6.99 |
      1 |   0.99 |
      1 |   2.99 |
      2 |   9.99 |
      2 |   2.99 |

注意: 存储过程中定义变量、条件、处理程序、光标都是通过declare 定义的,它们之间是有先后顺序要求的。

       变量和条件必须在最前面声明, 然后才是光标的声明,最后才可以是处理程序的声明。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值