• MySQL游标操作指南


    本篇文章是对MySQL游标的具体使用进行了详细的分析介绍,需要的朋友参考下
     

    测试表 level 

    代码如下:

    create table test.level (name varchar(20));

    再 insert 些数据 ;
     

    初始化

    代码如下:

    drop procedure if exists useCursor //

    建立 存储过程 create
    代码如下:
    CREATE PROCEDURE useCursor()
     
    
    BEGIN

    局部变量的定义 declare
     代码如下:

    declare tmpName varchar(20) default '' ;  
    declare allName varchar(255) default '' ;  
    declare cur1 CURSOR FOR SELECT name FROM test.level ; 

    MySQL 游标 异常后 捕捉

    并设置 循环使用 变量 tmpname 为 null 跳出循环。

    代码如下:

    declare CONTINUE HANDLER FOR SQLSTATE '02000' SET tmpname = null;
    

      

    开游标
    代码如下:

    OPEN cur1;
    

      

    游标向下走一步
    代码如下:

    FETCH cur1 INTO tmpName;
    

      

    循环体 这很明显 把MySQL 游标查询出的 name 都加起并用 ; 号隔开
    代码如下:

    WHILE ( tmpname is not null) DO 
    set tmpName = CONCAT(tmpName ,";") ; 
    set allName = CONCAT(allName ,tmpName) ;
    

      

    游标向下走一步
    代码如下:

    FETCH cur1 INTO tmpName;
    

      

    结束循环体: 
    代码如下:

    END WHILE;
    

      

    关闭游标
    代码如下:

    CLOSE cur1;
    

      

    选择数据
     代码如下:

    select allName ;
    

      

    结束存储过程
     代码如下:

    END;//
    

      

    调用存储过程:
     代码如下:

    call useCursor()//
     

    loop循环游标:
     代码如下:

    DELIMITER $$  
    
    DROP PROCEDURE IF EXITS cursor_example$$  
    CREATE PROCEDURE cursor_example()  
         READS SQL DATA  
    BEGIN  
         DECLARE l_employee_id INT;  
         DECLARE l_salary NUMERIC(8,2);  
         DECLARE l_department_id INT;  
         DECLARE done INT DEFAULT 0;  
         DECLARE cur1 CURSOR FOR SELECT employee_id, salary, department_id FROM employees;  
         DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;  
    
         OPEN cur1;  
         emp_loop: LOOP  
             FETCH cur1 INTO l_employee_id, l_salary, l_department_id;  
             IF done=1 THEN  
                 LEAVE emp_loop;  
             END IF;  
         END LOOP emp_loop;  
         CLOSE cur1;  
    END$$  
    DELIMITER ; 
    

      

    repeat循环游标:
     代码如下:

    /*创建过程*/
    DELIMITER //
    DROP PROCEDURE IF EXISTS test //
    CREATE PROCEDURE test()
    BEGIN
        DECLARE done INT DEFAULT 0;
        DECLARE a VARCHAR(200) DEFAULT '';
        DECLARE c VARCHAR(200) DEFAULT '';
    
        DECLARE mycursor CURSOR FOR SELECT  fusername FROM uchome_friend;
        DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
    
        OPEN mycursor;
    
        REPEAT 
            FETCH mycursor INTO a;
            IF NOT done THEN
                SET c=CONCAT(c,a);/*字符串相加*/
            END IF;
    
        UNTIL done END REPEAT;
    
        CLOSE mycursor;
    
        SELECT c;
    END //
    DELIMITER ;
    

      

     代码如下:


    /*创建过程*/
    DELIMITER //
    DROP PROCEDURE IF EXISTS test //
    CREATE PROCEDURE test()
    BEGIN
        DECLARE done INT DEFAULT 0;
        DECLARE a VARCHAR(200) DEFAULT '';
        DECLARE c VARCHAR(200) DEFAULT '';
    
        DECLARE mycursor CURSOR FOR SELECT  fusername FROM uchome_friend;
        DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
    
        OPEN mycursor;
    
        REPEAT 
            FETCH mycursor INTO a;
            IF NOT done THEN
                SET c=CONCAT(c,a);/*字符串相加*/
            END IF;
    
        UNTIL done END REPEAT;
    
        CLOSE mycursor;
    
        SELECT c;
    END //
    DELIMITER ;
    

      

  • 相关阅读:
    student
    super
    java 浮点数
    视图
    日期转换函数
    左外连接,右外连接,全外连接,自然连接,自连接区别
    Python中sys.argv[ ]的用法
    0 Scala
    统计字符串字符个数
    3个链表排序整合到一起
  • 原文地址:https://www.cnblogs.com/lp-zy/p/4378525.html
Copyright © 2020-2023  润新知