MySQL必知必会 学习笔记 第二十四章 使用游标

MySQL 5增加了对游标的支持。

游标是存储在MySQL服务器上的数据库查询,它不是SELECT语句,而是被该语句检索出来的结果集,存储了游标后,就能在检索出来的行中前进或后退一行或多行。

不同于多数DBMS,MySQL游标只能用于存储过程和函数。

使用游标步骤:
1.使用前必须先声明(定义)它。这个过程实际上没有检索数据,它只是定义要使用的SELECT语句。
2.声明后,必须打开游标以供使用。这个过程使用前面定义的SELECT语句把数据实际检索出来。
3.根据需要取出(检索)各行。
4.使用结束时,关闭游标。

声明游标后,可频繁地开关游标。游标打开后,可频繁地进行取操作。

创建游标:

CREATE PROCEDURE procedureName()
BEGIN
    DECLARE cursorName CURSOR
    FOR
    SELECT语句
END;

存储过程处理完成后,游标就消失了。

打开游标:

OPEN cursorName;

在执行OPEN语句时执行查询,存储检索出的数据以供浏览和滚动。

关闭游标:

CLOSE cursorName;

CLOSE语句释放游标使用的所有内部内存和资源。如果想再打开游标,再调用OPEN即可。

如果不明确关闭游标,到达END语句时会自动关闭它。

游标被打开后,可使用FETCH语句分别访问它的每一行,它还会向前移动游标的内部行指针,使下一条FETCH语句检索下一行:

CREATE PROCEDURE procedureName()
BEGIN
    DECLARE o INT;

    DECLARE cursorName CURSOR
    FOR
    SELECT order_num FROM orders;

    OPEN cursorName;

    FETCH cursorName INTO o;

    CLOSE cursorName;
END;

循环检索数据,从第一行到最后一行:

CREATE PROCEDURE procedureName()
BEGIN
    DECLARE done BOOLEAN DEFAULT 0;
    DECLARE o INT;

    DECLARE cursorName CURSOR
    FOR
    SELECT order_num FROM orders;

    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;    -- SQLSTATE ‘02000’是未找到条件,即FETCH最后一条数据之后的数据时出现

    OPEN cursorName;

    REPEAT
        FETCH cursorName INTO o;
    UNTIL done END REPEAT;

    CLOSE cursorName;
END;

DECLARE定义的局部变量必须在游标或CONTINUE HANDLER之前定义,CONTINUE HANDLER必须在游标之后定义。

除了REPEAT,MySQL还支持循环语句,它会循环直到使用LEAVE语句手动退出。通常REPEAT语句的语法更适合对游标操作。

存储过程中可以创建表,也能调用另一个存储过程,如果调用另一个存储过程时需要参数:

CREATE PROCEDURE procedureName1()
BEGIN
    DECLARE o INT;

    CALL procedureName2(o);    -- 不需要@
END;

おすすめ

転載: blog.csdn.net/tus00000/article/details/111596534