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存儲過程游標必須定義在存儲過程最前端


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM