DB2,MySql,SqlServer,Oracle游标使用总结

下面开始写一些在存储过程中常用到游标例子(常用的关系型数据库)

-- MySql
BEGIN
    -- 1. 声明变量
    DECLARE v_done      boolean     ;
    DECLARE v_column1   varchar(100);
    DECLARE v_column2   varchar(100);
    -- 2. 声明游标cur1
    DECLARE cur1 CURSOR FOR
    SELECT [column1(varchar(100)),column2(varchar(100)),......] FROM [table_name];
    -- 3. 遍历结束后赋值v_done为true
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = true;
    -- 4. 打开游标
    OPEN cur1;
    LOOP1:LOOP
        -- 5. 遍历结果集
        FETCH cur1 INTO v_column1, v_column2;
        IF v_done THEN
            LEAVE LOOP1;
        END IF;
        -- 6. 这里处理业务逻辑
    END LOOP;
        -- 7. 关闭游标
    CLOSE cur1;
END;
-- DB2 
BEGIN
    -- 1. 声明变量
    DECLARE SQLCODE      integer        ;  --系统SQL出错编码
    DECLARE v_column1   varchar(100);
    DECLARE v_column2   varchar(100);
    -- 2. 声明游标cur1
    DECLARE cur1 CURSOR FOR
    SELECT [column1(varchar(100)),column2(varchar(100)),......] FROM [table_name];
    -- 3. 打开游标
    OPEN cur1;
    -- 4. 遍历结果集
    FETCH cur1 INTO v_column1, v_column2;
    WHILE (SQLCODE = 0) DO
        -- 5. 这里处理业务逻辑
        FETCH cur1 INTO v_column1, v_column2;
    END WHILE;
    -- 6. 关闭游标
    CLOSE cur1;
END;
-- SqlServer
-- 1.申明一个游标                                                         
    cursor cur1 is   
    select * from a;    
-- 2.打开游标     
open cur1 ;                                                                       
    -- 3.循环游标 
    FETCH NEXT FROM  cur1 INTO @v_assesscell_id ,@v_assesscell_name;
    WHILE @@FETCH_STATUS =0 
    BEGIN   
        BEGIN 
            /* 这里是业务逻辑 */   
        END 
        FETCH NEXT FROM  cur1 INTO @v_assesscell_id ,@v_assesscell_name;  
    END 
-- 4.关闭游标
CLOSE cur1 ;
-- 5.释放资源
DEALLOCATE cur1 ;
-- Oracle
-- 1. 声明游标cur1
DECLARE CURSOR cur1 IS
SELECT [column1(varchar(100)),column2(varchar(100)),......] FROM [table_name];
-- 2. 声明变量
v_row  cur%ROWTYPE;  -- 行变量
BEGIN
    -- 3. 打开游标
    OPEN cur1;
    LOOP
        -- 4. 遍历结果集
        FETCH cur1 INTO v_row;
        -- 5. 遍历结束后退出循环
        EXIT WHEN cur1%NOTFOUND;
        -- 6. 这里处理业务逻辑
    END LOOP;
    -- 7. 关闭游标
    CLOSE cur1;
END;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值