• MySQL基础之使用游标


    游标

    使用简单的SELECT语句, 没有办法得到第一行、下一行、或前10行, 也不存在每次一行地处理所有行的简单方法

    有时候, 需要在检索出来的行中前进或后退一行或多行。这就是使用游标的原因。游标是一个存储在MySQL服务器上的数据库查询, 它不是一条SELECT语句, 而是被该语句检索出来的结果集。在存储了游标之后, 应用程序可以根据需要滚动或浏览其中的内容

    游标主要用户交互式应用, 其中用户需要滚动屏幕上的数据, 并对数据进行浏览或作出更改

    MySQL的游标只能用户存储过程(和函数)

    使用游标

    使用游标有几个明确的步骤

    • 在能够使用游标之前, 必须声明它。这个过程实际上没有检索数据, 它只是定义要使用的SELECT语句
    • 一旦声明后, 必须打开游标以供使用
    • 对于填有数据的游标, 根据需要取出(检索)各行
    • 在结束游标使用时, 必须关闭游标

    创建游标

    游标用DECLARE语句创建。DECLARE命名游标, 并定义相应的SELECT语句, 根据需要带WHERE和其他子句。

    MariaDB [crashcourse]> DELIMITER $
    MariaDB [crashcourse]> CREATE PROCEDURE productorders()
        -> BEGIN
        -> DECLARE ordernumbers CURSOR FOR SELECT order_num FROM orders;
        -> END $

    存储过程处理完后, 游标就消失, 因为它局限于存储过程。

    打开和关闭游标

    游标用OPEN CURSOR语句来打开

    MariaDB [crashcourse]>  OPEN ordernumbers;

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

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

    MariaDB [crashcourse]>  CLOSE ordernumbers;

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

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

    MariaDB [crashcourse]> DELIMITER $
    MariaDB [crashcourse]> CREATE PROCEDURE productorders()
        -> BEGIN
        ->  -- Declare the cursor
        ->  DECLARE ordernumbers CURSOR FOR SELECT order_num FROM orders;
        ->  
        ->  -- Open the cursor
        ->  OPEN ordernumbers;
        ->
        ->  --Close the cursor
        ->  CLOSE ordernumbers;    
        -> END $

    使用游标数据

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

    MariaDB [crashcourse]> DELIMITER $
    MariaDB [crashcourse]> CREATE PROCEDURE productorders()
        -> 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 $

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

  • 相关阅读:
    【ZYNQ Ultrascale+ MPSOC FPGA教程】第八章FPGA片内FIFO读写测试实验
    【ZYNQ Ultrascale+ MPSOC FPGA教程】第七章 FPGA片内ROM测试实验
    【ZYNQ Ultrascale+ MPSOC FPGA教程】第六章 FPGA片内RAM读写测试实验
    【ZYNQ Ultrascale+ MPSOC FPGA教程】第五章 Vivado下PLL实验
    【ZYNQ Ultrascale+ MPSOC FPGA教程】第四章 PL的LED实验
    在Mac OS X中使用VIM开发STM32(3)
    在Mac OS X中使用VIM开发STM32(2)
    STM32F40xxx 与 STM32F41xxx Flash结构详解
    在Mac OS X中搭建STM32开发环境(3)
    在Mac OS X中搭建STM32开发环境(2)
  • 原文地址:https://www.cnblogs.com/featherwit/p/13435850.html
Copyright © 2020-2023  润新知