zoukankan      html  css  js  c++  java
  • mysql游标的使用

    1.循环遍历某个表并对其进行相应的操作(添加、修改、删除),这时我们就需要用到咱们在编程中常常用的for或foreach;下面使用游标遍历

    利用游标循环更新、删除test表中的数据

    DECLARE My_Cursor CURSOR --定义游标
    FOR (SELECT * FROM dbo.test) --查出需要的集合放到游标中
    OPEN My_Cursor; --打开游标
    FETCH NEXT FROM My_Cursor ; --读取第一行数据
    WHILE @@FETCH_STATUS = 0
        BEGIN
            --UPDATE dbo.test SET UserName = UserName + 'A' WHERE CURRENT OF My_Cursor; --更新
            --DELETE FROM dbo.test WHERE CURRENT OF My_Cursor; --删除
            FETCH NEXT FROM My_Cursor; --读取下一行数据
        END
    CLOSE My_Cursor; --关闭游标
    DEALLOCATE My_Cursor; --释放游标
    GO

    2.利用游标循环更新MemberService表中的数据(更新每个用户所购买服务的时间)【转载:借鉴LUCKY

    DECLARE @UserId varchar(50) 
    DECLARE My_Cursor CURSOR --定义游标
    FOR (SELECT UserId FROM dbo.MemberAccount) --查出需要的集合放到游标中
    OPEN My_Cursor; --打开游标
    FETCH NEXT FROM My_Cursor INTO @UserId; --读取第一行数据(将MemberAccount表中的UserId放到@UserId变量中)
    WHILE @@FETCH_STATUS = 0
        BEGIN
            PRINT @UserId; --打印数据(打印MemberAccount表中的UserId)
            UPDATE dbo.MemberService SET ServiceTime = DATEADD(Month, 6, getdate()) WHERE UserId = @UserId; --更新数据
            FETCH NEXT FROM My_Cursor INTO @UserId; --读取下一行数据(将MemberAccount表中的UserId放到@UserId变量中)
        END
    CLOSE My_Cursor; --关闭游标
    DEALLOCATE My_Cursor; --释放游标
    GO

     3.实践案例

    CREATE PROCEDURE proc_test(IN id VARCHAR(50))
    BEGIN
    
    DECLARE done INT DEFAULT 0;-- 结束循环字段
    DECLARE aa varchar(200);
    DECLARE bb varchar(200);
    
    DECLARE alist CURSOR FOR SELECT a,b FROM table_test b1 WHERE b1.bflag=1
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; #溢出处理
    OPEN alist;-- 开始游标
    
    /* 遍历数据表 */
    read_loop:loop
    
    FETCH NEXT FROM alist INTO aa,bb;
    
    IF done =1 THEN
            LEAVE read_loop;
    END IF;
    
    UPDATE table_test SET b=bb WHERE a=aa;
    
    SET done = 0;
    end loop  read_loop;
    /* 关闭游标 */
    CLOSE alist;
    
    END
    作者:chenze
    出处:https://www.cnblogs.com/chenze-Index/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    如果文中有什么错误,欢迎指出。以免更多的人被误导。
  • 相关阅读:
    springboot文件上传: 单个文件上传 和 多个文件上传
    Eclipse:很不错的插件-devStyle,将你的eclipse变成idea风格
    springboot项目搭建:结构和入门程序
    POJ 3169 Layout 差分约束系统
    POJ 3723 Conscription 最小生成树
    POJ 3255 Roadblocks 次短路
    UVA 11367 Full Tank? 最短路
    UVA 10269 Adventure of Super Mario 最短路
    UVA 10603 Fill 最短路
    POJ 2431 Expedition 优先队列
  • 原文地址:https://www.cnblogs.com/chenze-Index/p/11081156.html
Copyright © 2011-2022 走看看