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