CALCLEVEL.sql 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. DROP PROCEDURE IF EXISTS `CALCLEVEL`;
  2. delimiter ;;
  3. CREATE PROCEDURE `CALCLEVEL`(IN `PCPID` INT)
  4. BEGIN
  5. DECLARE
  6. FLAG,
  7. MLAYER,
  8. MUSERTYPE INT DEFAULT 0;
  9. DECLARE
  10. MGPV DECIMAL ( 10, 2 );
  11. DECLARE
  12. MC CURSOR FOR SELECT
  13. LAYER
  14. FROM
  15. AR_BS_BONUS_103_CALC_NET T
  16. WHERE
  17. T.USER_TYPE = 30 GROUP BY LAYER ORDER BY LAYER DESC;
  18. DECLARE
  19. CONTINUE HANDLER FOR NOT FOUND
  20. SET FLAG = 1;
  21. START TRANSACTION;-- 打开游标
  22. OPEN MC;-- 获取结果
  23. L2 :
  24. LOOP
  25. FETCH MC INTO MLAYER;
  26. IF
  27. FLAG = 1 THEN-- 当无法FETCH会触发HANDLER CONTINUE
  28. LEAVE L2;
  29. END IF;
  30. -- 计算当前层数的奖金以及向上所贡献的奖金
  31. CALL CALCLEVEL_ ( MLAYER ,PCPID);
  32. END LOOP;
  33. CLOSE MC;
  34. /*WHILE
  35. ( MLAYER >= 0 ) DO-- 计算当前层数的奖金以及向上所贡献的奖金
  36. CALL CALCLEVEL_ ( MLAYER );
  37. SET MLAYER := MLAYER - 1;
  38. END WHILE;*/-- 级别更新
  39. UPDATE AR_BS_BONUS_103_CALC C1
  40. INNER JOIN AR_BS_BONUS_103_CALC_NET C2 ON C1.USER_ID = C2.USER_ID
  41. AND C1.USER_TYPE <> C2.USER_TYPE
  42. SET C1.USER_TYPE = C2.USER_TYPE;
  43. END
  44. ;;