zoukankan      html  css  js  c++  java
  • 《mysql必知必会》读书笔记游标的使用

    游标的使用

      MySQL中游标只能用于存储过程

    创建游标

    CREATE PROCEDURE processorders()
    BEGIN
    DECLARE ordernumbers CURSOR
    FOR
    SELECT order_num FROM orders;
    END;

    打开关闭游标

    CREATE PROCEDURE processorders()
    BEGIN
    DECLARE ordernumbers CURSOR
    FOR
    SELECT order_num FROM orders;
    
    --打开游标
    OPEN ordernumbers;
    --关闭游标
    CLOSE ordernumbers;
    END;

    使用游标数据

    CREATE PROCEDURE processorders()
    BEGIN
    --定义一个逻辑控制临时变量
    DECLARE done BOOLEAN DEFAULT 0;
    
    DECLARE o INT;
    --创建游标
    DECLARE ordernumbers CURSOR
    FOR
    SELECT order_num FROM orders;
    --条件出现时执行的代码:
    --当SQLSTATE '02000'出现时,SET done=1
    --SQLSTATE '02000'是一个未找到条件,当REPEAT由于没有更多行供循环而不能继续循环时,出现这个条件
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1;
    --打开游标
    OPEN ordernumbers;
    --循环遍历所有行
    REPEAT
    --得到数据
    FETCH ordernumbers INTO o;
    --结束循环
    UNTIL done END REPEAT;
    --关闭游标
    CLOSE ordernumbers;
    END

      注意:DECLARE语句的次序,DECLARE语句有特定的次序,用DECLARE定义局部变量必须在定义任意游标或者句柄之前,而句柄又必须在游标之后定义。
    REPEAT语句的语法更适合对游标进行循环

    综合应用

    -- 创建存储过程
    CREATE PROCEDURE processorders()
    BEGIN
    -- 定义临时变量用于逻辑控制
    DECLARE done BOOLEAN DEFAULT 0;
    -- 临时变量
    DECLARE o INT;
    DECLARE t DECIMAL(8,2)
    -- 创建游标
    DECLARE ordernumbers CURSOR
    FOR
    SELECT order_num FROM orders;
    -- 句柄
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1;
    -- 创建表ordertotals
    CREATE TABLE IF NOT EXISTS ordertotals(
    order_num INT,
    total DECIMAL(8,2)
    );
    -- 打开存储过程
    OPEN ordernumbers;
    -- 游标循环所有行
    REPEAT
    -- 获取数据
    FETCH ordernumbers INTO o;
    -- 将得到的参数o传入之前定义的存储过程ordertotal
    CALL ordertotal(o,1,t);
    -- 将得到的值存入表 ordertotals
    INSERT INTO ordertotals(order_num,total)VALUSE(o,t);
    -- 结束游标循环
    UNTIL done END REPEAT;
    -- 关闭游标
    CLOSE ordernumbers;
    END;
  • 相关阅读:
    本周最新文献速递20211128
    R报错:Error in gzfile(file, "rb") : cannot open the connection rds
    本地安装github上的R包
    本周最新文献速递20211114
    本周最新文献速递20211107(论怎么在信号少、样本量少的情况下发到NG上)
    经典排序算法 桶排序Bucket sort
    经典排序算法 耐心排序Patience Sorting
    [MSSQL]FOR XML AUTO II
    经典排序算法 快速排序Quick sort
    经典排序算法 冒泡排序Bubble sort
  • 原文地址:https://www.cnblogs.com/wulaa/p/7768086.html
Copyright © 2011-2022 走看看