mysql游标遍历-记录

mysql游标遍历初次学习使用

DELIMITER $$

CREATE PROCEDURE process_orders()
BEGIN
    DECLARE done INT DEFAULT 0;
    DECLARE order_id INT;
    DECLARE order_date DATE;

    -- 声明游标
    DECLARE cur CURSOR FOR 
        SELECT id, order_date FROM orders WHERE order_status = 'pending';

    -- 声明继续处理的条件
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

    -- 打开游标
    OPEN cur;

    -- 遍历结果集
    read_loop: LOOP
        FETCH cur INTO order_id, order_date;
        IF done THEN
            LEAVE read_loop;
        END IF;

        -- 在这里可以对每条记录进行处理
        INSERT INTO processed_orders (order_id, order_date) VALUES (order_id, order_date);
    END LOOP;

    -- 关闭游标
    CLOSE cur;
END$$

DELIMITER ;

以下是代码中使用的主要语法

  1. DELIMITER: 用于更改 MySQL 解释器的命令结束符。通常,MySQL 使用 ; 作为命令结束符,但在定义存储过程时,使用
    DELIMITER $$ 可以避免中途的 ; 导致解释器错误地认为过程定义已经结束。

  2. CREATE PROCEDURE: 创建一个存储过程。在本例中,存储过程名为 process_orders。

  3. DECLARE:

    3.1 DECLARE done INT DEFAULT 0;: 声明一个名为 done 的整数变量,初始值为 0。用于标识是否已读取完所有记录。
    3.2 DECLARE cur CURSOR FOR: 声明一个游标 cur,用于遍历查询 SELECT id, order_date FROM orders WHERE order_status = ‘pending’ 返回的结果集。

  4. HANDLER: 定义异常处理器。DECLARE CONTINUE HANDLER FOR NOT FOUND
    表示当游标遍历到结果集末尾时,设置 done 为 1。

  5. OPEN: 打开游标,使其可以开始遍历结果集。

  6. FETCH: 从游标中获取一行数据,并将其存储在相应的变量中。

  7. LOOP: 开始一个循环。read_loop 是循环的标识符,用于退出循环。

  8. LEAVE: 用于退出循环。在 done 变量为 1 时退出循环。

  9. CLOSE: 关闭游标,释放与其相关的资源。

你可能感兴趣的:(奇淫技巧系列,mysql,数据库)