zoukankan      html  css  js  c++  java
  • MariaDB CURSOR

    MariaDB CURSOR

    示例一:
    简单创建CURSO并打开,关闭操作
    DELIMITER //
    CREATE PROCEDURE processorders() 
    BEGIN
        DECLARE ordernumbers CURSOR FOR
        SELECT order_num FROM orders;
    END;//
    DELIMITER ;

    DELIMITER //
    CREATE OR REPLACE PROCEDURE processorders() 
    BEGIN
        -- Declare the cursor 
        DECLARE ordernumbers CURSOR FOR
        SELECT order_num FROM orders;
        -- Open the cursor 
        OPEN ordernumbers;
        -- Close the cursor 
        CLOSE ordernumbers;
    END;//
    DELIMITER ;




    示例二:
    打开CURSOR对象并将值FETCH到指定变量中
    DELIMITER //
    CREATE OR REPLACE 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 ordernumbers;
        -- Get order number
        FETCH ordernumbers INTO o;
        -- Close the cursor 
        CLOSE ordernumbers;
    END;//
    DELIMITER ;

    示例三:
    定义CONTINUE HANDLER并重复FETCH,直到CURSOR结束
    DELIMITER //
    CREATE OR REPLACE 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;
        -- Declare continue handler
        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;//
    DELIMITER ;

    示例四:
    综合
    DELIMITER //
    CREATE OR REPLACE PROCEDURE processorders() 
    BEGIN
        -- Declare local variables 
        DECLARE done BOOLEAN DEFAULT 0; 
        DECLARE o INT;
        DECLARE t DECIMAL(8,2);
        -- Declare the cursor 
        DECLARE ordernumbers CURSOR FOR SELECT order_num FROM orders;
        -- Declare continue handler
        DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1;
        -- Create a table to store the results 
        CREATE TABLE IF NOT EXISTS ordertotals(order_num INT, total DECIMAL(8,2));
        -- Open the cursor 
        OPEN ordernumbers;
        -- Loop through all rows 
        REPEAT
            -- Get order number
            FETCH ordernumbers INTO o;
            -- Get the total for this order 
            CALL ordertotal(o, 1, t);
            -- Insert order and total into ordertotals 
            INSERT INTO ordertotals(order_num, total) VALUES(o, t);
        -- End of loop
        UNTIL done END REPEAT;
        -- Close the cursor 
        CLOSE ordernumbers;
    END;//
    DELIMITER ;

    (jlive)[crashcourse]>CALL processorders();

    Query OK, 1 row affected (0.01 sec)


    (jlive)[crashcourse]>SELECT * FROM ordertotals;

    +-----------+---------+

    | order_num | total   |

    +-----------+---------+

    |     20005 |  158.86 |

    |     20006 |   58.30 |

    |     20007 | 1060.00 |

    |     20008 |  132.50 |

    |     20009 |   40.78 |

    |     20009 |   40.78 |

    +-----------+---------+

    6 rows in set (0.00 sec)


    去CALL的时候不会显示任何数据,而是把通过CURSOR FETCH到的值传入PROCEDURE ordertotal计算出total值,最后将order_num,total插入新表ordertotals中

  • 相关阅读:
    抖动代码
    WSAWaitForMultipleEvents()
    udp 不需要 listen
    WSAEventSelect
    C++ Win32控制台应用程序捕捉关闭事件
    玩转Win32开发(2):完整的开发流程
    win32线程池代码(WinApi/C++)
    又线程类封装
    Win2 Socket(套接字)相关 API
    Win32函数Sleep的精度测试
  • 原文地址:https://www.cnblogs.com/lixuebin/p/10814170.html
Copyright © 2011-2022 走看看