阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Oracle与MySQL内嵌游标的使用示例

147次阅读
没有评论

共计 1390 个字符,预计需要花费 4 分钟才能阅读完成。

Oracle 游标用 For 循环比较简单,MySQL 也是最近才开始用,感觉稍微麻烦一点,下边直接上代码:

———————————————————–
— Oracle
— 内嵌游标为带参游标,参数为外游标值
———————————————————–
DECLARE
  cursor cur_outer is select dept_id from tbl_test_dept;
  cursor cur_inner(deptid varchar2) is (SELECT user_id FROM tbl_test_user WHERE dept_id=deptid);
  BEGIN
    FOR DEPT_ITEM IN cur_outer LOOP
              —
              —
        FOR KEY_ITEM IN cur_process(DEPT_ITEM.DEPT_ID) LOOP – 开始内循环
              —
              —
        END LOOP;
    END LOOP;
  commit;
END;

——————————
— Mysql
— HANDLER 只能申明一个
— 内循环结束后需要重置 done
— 发现 mysql 不能直接执行 begin..end,需要创建存储过程后调用执行;
——————————
CREATE PROCEDURE `PROC_CURSOR_TEST`()
BEGIN
  DECLARE done INT DEFAULT FALSE;
  DECLARE item_outer VARCHAR(50);outer
  DECLARE item_inner VARCHAR(50);
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
  — 定义内外游标
  DECLARE cur_outer cursor for select dept_id from tbl_test_dept;
  DECLARE cur_inner cursor for (SELECT user_id FROM tbl_test_user WHERE dept_id=item_outer);– 查询条件可直接用外游标变量值

  OPEN cur_outer;
  out_loop: LOOP
    fetch cur_outer into item_outer;
      IF  done THEN — 判断是否继续循环
        LEAVE out_loop;
      END IF;
        —
        —
    OPEN cur_process; — 打开内嵌游标
    inner_loop: LOOP
    fetch cur_inner into item_inner;
      IF  done THEN
        LEAVE inner_loop;
      END IF;
        —
        —
    end loop;
    CLOSE cur_inner;
    SET done = 0;  — 关闭内游标,重置 done
  end loop;
  CLOSE cur_outer;
  commit;
END;
call PROC_CURSOR_TEST(); — 调用存储过程
drop procedure PROC_CURSOR_TEST; – 删除

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-22发表,共计1390字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中