• Mysql存储过程给变量赋值的几种方法实践


    BEGIN
        DECLARE v_request_count INT;    #申请次数
        DECLARE v_plan_count         INT;    #安排次数
        DECLARE v_learn_count     INT;    #学习次数
        DECLARE v_learned_count INT;    #已经学习次数
        DECLARE v_pass_count         INT;    #通过次数
    
        DECLARE v_cid                     INT;
        DECLARE v_course_id         INT;
        
        DECLARE stop INT DEFAULT 0; /* 终止标记 */ 
        DECLARE cur CURSOR FOR (SELECT cid, course_id FROM lms_company_course);
    
        DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET stop = 1;
    
        OPEN cur;
        FETCH cur INTO v_cid, v_course_id;
        WHILE stop <> 1 DO
                
                #申请次数
                SELECT @v_request_count:=COUNT(*) FROM lms_course_request WHERE cid=v_cid AND course_id=v_course_id;
                
                #安排次数
                SELECT COUNT(*) INTO @v_plan_count FROM lms_student_course_relation WHERE cid=v_cid AND course_id=v_course_id AND type=2;
    
                #学习次数
                SELECT COUNT(*) INTO v_learn_count FROM lms_student_course_relation WHERE cid=v_cid AND course_id=v_course_id;
            
                #已经学习次数
                SET v_learned_count=(SELECT COUNT(*) FROM lms_student_course_relation WHERE cid=v_cid AND course_id=v_course_id AND progress=100);
    
                #企业课后测试通过率、通过次数            
                SELECT @qualified_rate:=qualified_rate FROM lms_company_setting WHERE cid = v_cid;
                SET v_pass_count:=(SELECT COUNT(*) FROM lms_student_course_relation WHERE cid=v_cid AND course_id=v_course_id AND review_test_score>=@qualified_rate);
                
                #更新数据
                UPDATE lms_company_course SET request_count=@v_request_count, plan_count=@v_plan_count, learn_count=v_learn_count,
                learned_count=v_learned_count, pass_count=v_pass_count
                WHERE cid=v_cid AND course_id=v_course_id;
    
        FETCH cur INTO v_cid, v_course_id;
        END WHILE;
        CLOSE cur;
    END

    小结:

    1、mysql存储过程变量可以先定义,也可以过程中@变量动态定义

    2、mysql存储过程游标必须定义在存储过程最前端

  • 相关阅读:
    JS DOM基础
    JS 部分常见循环、分支、嵌套练习
    记一些让footer始终位于网页底部的方法
    JS 实现banner图的滚动和选择效果
    JS 部分基础内容总结
    Flex弹性布局基础教程
    My SQL数据库的安装与配置
    网页共用头部和尾部的部分方法
    Unity3d入门 关于unity工具的熟悉
    Unity3d学习 制作地形
  • 原文地址:https://www.cnblogs.com/lovekingly/p/3484251.html
Copyright © 2020-2023  润新知