当前位置:   article > 正文

问题之mysql存储过程CASE条件语句判断根据问题(已解决)_msyql procedure 判断select 是否有结果

msyql procedure 判断select 是否有结果

这两天在学习存储过程,在条件语句 CASE WHEN EHEN END CASE 的时候发现一件奇怪的事

 

  1. mysql> DROP PROCEDURE IF EXISTS `pro_test`;
  2. DELIMITER $$
  3. CREATE PROCEDURE `pro_test`(IN parameter int)
  4. BEGIN
  5. SET @parameter=parameter + 1;
  6. SELECT @parameter;
  7. CASE @parameter
  8. WHEN 1 THEN
  9. SET @parameter=parameter + 1;
  10. SELECT @parameter;
  11. WHEN 2 THEN
  12. SET @parameter=parameter + 2;
  13. SELECT @parameter;
  14. ELSE
  15. SET @parameter=parameter + 3;
  16. SELECT @parameter;
  17. END CASE ;
  18. END ;
  19. $$
  20. DELIMITER ;
  21. Query OK, 0 rows affected
  22. Query OK, 0 rows affected
  23. mysql> select @parameter;
  24. +------------+
  25. | @parameter |
  26. +------------+
  27. | 4 |
  28. +------------+
  29. 1 row in set
  30. mysql> set @parameter=2;
  31. Query OK, 0 rows affected
  32. mysql> call `pro_test`(@parameter
  33. );
  34. +------------+
  35. | @parameter |
  36. +------------+
  37. | 3 |
  38. +------------+
  39. 1 row in set
  40. +------------+
  41. | @parameter |
  42. +------------+
  43. | 5 |
  44. +------------+
  45. 1 row in set
  46. Query OK, 0 rows affected
  47. mysql>

注意看结果,为3和5,CASE没有使用存储过程里更新的@parameter(值为3)变量,而是还是输入时的@parameter(值为2)

不知道其中的理论是什么?如果有朋友知道还望不理赐教

 

问了下同事,问题已解决,原因是@parameter跟parameter根本不是一个变量

修改为如下就跟逻辑对的上了

  1. DROP PROCEDURE IF EXISTS `pro_test`;
  2. DELIMITER $$
  3. CREATE PROCEDURE `pro_test`(IN parameter int)
  4. BEGIN
  5. SET @parameter=parameter + 1;
  6. SELECT @parameter;
  7. CASE @parameter
  8. WHEN 1 THEN
  9. SET @parameter=@parameter + 1;
  10. SELECT @parameter;
  11. WHEN 2 THEN
  12. SET @parameter=@parameter + 2;
  13. SELECT @parameter;
  14. ELSE
  15. SET @parameter=@parameter + 3;
  16. SELECT @parameter;
  17. END CASE ;
  18. END ;
  19. $$
  20. DELIMITER ;

 

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号