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

    21.1 游标

    在存储过程中使用游标可以对一个结果集进行移动遍历。

    游标主要用于交互式应用,其中用户需要对数据集中的任意行进行浏览和修改。

    21.2 使用游标

    使用游标的四个步骤:

    1. 声明游标,这个过程没有实际检索出数据,它只是定义要使用的SELECT语句; 
    2. 打开游标;
    3. 取出数据;
    4. 关闭游标。

    在声明游标后,可根据需要频繁地打开和关闭游标。在游标打开后, 可根据需要频繁地执行取操作。

    21.2.1 创建游标

    游标用DECLARE语句创建。

    例如下面的例子定义了名为ordernumbers的游标,使用了可以检索所有订单的SELECT语句。

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

    DECLARE语句用来定义和命名游标,这里为ordernumbers。 存储过程处理完成后,游标就消失。在定义游标之后,可以打开它。

    21.2.2 打开和关闭游标

    游标用OPEN CURSOR语句来打开:

    OPEN ordernumbers;

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

    游标处理完成后,应当使用如下语句关闭游标:

    CLOSE ordernumbers;

    CLOSE释放游标使用的所有内部内存和资源,因此在每个游标不再需要时都应该关闭。

    在一个游标关闭后,如果没有重新打开,则不能使用它。但是,使用声明过的游标不需要再次声明,用OPEN语句打开它就可以了。

    21.2.3 使用游标数据

    在一个游标被打开后,可以使用FETCH语句分别访问它的每一行。FETCH指定检索什么数据(所需的列),检索出来的数据存储在什么地方。它还向前移动游标中的内部行指针,使下一条FETCH语句检索下一行(不重复读取同一行)。 

    第一个例子从游标中检索单个行(第一行):

    CREATE PROCEDURE processorders()
    BEGIN
        --Declare local variables
        DECLARE o INT;
    
        --Declare the cursor
        DECLARE ordernumbers CURSOR
        FOR
        SELECT order_num FROM orders;
    
        --Open the cursor
        OPEN oedernumbers;
    
        --Get order number
        FETCH ordernumbers INTO o;
    
        --Close the cursor
        CLOSE ordernumbers;
    
    END;

    其中FETCH用来检索当前行的order_num列(将自动从第一行开始)到一个名为o的局部声明的变量中。对检索出的数据不做任何处理。

     第二个例子,循环检索数据,从第一行到最后一行:

    CREATE PROCEDURE processorders()
    BEGIN
    
        --Declare local variables
        DECLARE done BOOLEAN DEFAULT 0;
        DECLARE o INT;
    
        --Declare the cursor
        DECLARE ordernumbers CURSOR
        FOR
        SELECT order_num FROM orders;
        
        -- 定义了一个 continue handler,当 sqlstate '02000' 这个条件出现时,会执行 set done = 1
        DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
    
        --Open the cursor
        OPEN ordernumbers;
    
        --Loop through all rows
        REPEAT
    
            --Get order number
            FETCH ordernumbers INTO o;
    
        --End of loop
        UNTIL done END REPEAT;
    
        --Close the cursor
        CLOSE ordernumbers;
    END

    这个例子使用FETCH检索当前order_num到声明的名为o的变量中。但与前一个例子不一样的是,这个例子中的FETCH是在REPEAT内,因此它反复执行直到done为真。为使它起作用,用一个DEFAULT 0

    定义变量done。

    那么, done怎样才能在结束时被设置为真呢?

    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
  • 相关阅读:
    boost之实用工具
    boost之内存池
    boost之智能指针
    boost之日期date_time
    boost之时间timer
    boost之网络通信
    boost之定时器和io_service
    【Linux 线程】线程同步《一》
    【Linux 线程】常用线程函数复习《四》
    【Linux 线程】常用线程函数复习《三》
  • 原文地址:https://www.cnblogs.com/xlzfdddd/p/10171754.html
Copyright © 2011-2022 走看看