itstarting:IT进行时

想自己所想,做自己所爱

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  28 随笔 :: 3 文章 :: 55 评论 :: 0 Trackbacks

对于MySQL,还是菜鸟。
近期做个东西,写了一个MySQL 的存储过程,其中涉及Cursor的使用,如下:

CREATE PROCEDURE `justifyGroupNum`()
    NOT DETERMINISTIC
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
/*how to run:call justifyGroupNum()*/
DECLARE p_group_id int;
declare p_num int;
declare stopFlag int;
DECLARE cursor_name CURSOR
  FOR select c_group_id,count(*) as num
      from `t_group_member`
      where c_valid in (3,4)
      group by c_group_id;
DECLARE CONTINUE HANDLER FOR NOT FOUND set stopFlag=1;

OPEN cursor_name;
REPEAT
FETCH cursor_name INTO p_group_id,p_num;
  begin
       update t_groupinfo set c_member_number=p_num where c_group_id=p_group_id;
  end;
UNTIL stopFlag = 1
END REPEAT;
CLOSE cursor_name;
END;

关注点有:
1、注意设置游标的countinue handler:DECLARE CONTINUE HANDLER FOR NOT FOUND set stopFlag=1;
2、注意REPEAT和UTILE [停止条件] END REPEAT的使用,否则不会循环;
3、怎样RUN?输入并执行:call justifyGroupNum()

posted on 2006-10-10 11:49 IT进行时 阅读(5276) 评论(3)  编辑  收藏

评论

# re: MySQL 的存储过程写法和Cursor的使用 2007-06-13 15:29 chy710
循环会多执行一次,是什么问题  回复  更多评论
  

# re: MySQL 的存储过程写法和Cursor的使用 2007-06-13 16:34 。。
update t_groupinfo set c_member_number=p_num where c_group_id=p_group_id;

改成:
if(stopFlag = 0) then
update t_groupinfo set c_member_number=p_num where c_group_id=p_group_id;

end if;
  回复  更多评论
  

# re: MySQL 的存储过程写法和Cursor的使用 2008-10-14 10:05 cookie
花了我不少时间。。。
应该
改成:
if(stopFlag is null) then
update t_groupinfo set c_member_number=p_num where c_group_id=p_group_id;

end if;
  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: