游标支持表名变量的存储过程写法

  
  
  
  
  1. DELIMITER $$ 
  2.  
  3. DROP PROCEDURE IF EXISTS `hcymysql`$$ 
  4.  
  5. CREATE DEFINER=`admin`@`%` PROCEDURE `hcymysql`(IN v_tname VARCHAR(20)) 
  6. BEGIN 
  7. DECLARE i INT;  
  8. DECLARE done INT DEFAULT 0;  
  9. DECLARE hcymysql_cursor CURSOR FOR SELECT id FROM view_tname; 
  10. DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1
  11.  
  12. DROP VIEW IF EXISTS view_tname ; 
  13. SET @sql=CONCAT("create view view_tname as select * from ", v_tname); 
  14. PREPARE stmt1 FROM  @sql; 
  15. EXECUTE stmt1 ; 
  16. DEALLOCATE PREPARE stmt1; 
  17.  
  18. OPEN hcymysql_cursor; 
  19.  
  20. select_loop: LOOP  
  21.  
  22. FETCH hcymysql_cursor INTO i; 
  23.  
  24. IF done=1 THEN 
  25.    LEAVE select_loop;  
  26. END IF;  
  27.  
  28. SELECT i; 
  29.  
  30. END LOOP select_loop; 
  31.  
  32. CLOSE hcymysql_cursor; 
  33.  
  34. END$$ 
  35.  
  36. DELIMITER ; 

执行:

  
  
  
  
  1. mysql> select * from t1; 
  2. +------+------+ 
  3. | id   | name | 
  4. +------+------+ 
  5. |    1 | a    |  
  6. |    2 | b    |  
  7. |    3 | cc   |  
  8. |    4 | d    |  
  9. |    5 | e    |  
  10. |    6 | f    |  
  11. |    7 | g    |  
  12. |    8 | h    |  
  13. |    9 | i    |  
  14. |    9 | h    |  
  15. +------+------+ 
  16. 10 rows in set (0.03 sec) 
  17.  
  18. mysql> call hcymysql('t1'); 
  19. +------+ 
  20. | i    | 
  21. +------+ 
  22. |    1 |  
  23. +------+ 
  24. 1 row in set (0.17 sec) 
  25.  
  26. +------+ 
  27. | i    | 
  28. +------+ 
  29. |    2 |  
  30. +------+ 
  31. 1 row in set (0.19 sec) 
  32.  
  33. +------+ 
  34. | i    | 
  35. +------+ 
  36. |    3 |  
  37. +------+ 
  38. 1 row in set (0.21 sec) 
  39.  
  40. +------+ 
  41. | i    | 
  42. +------+ 
  43. |    4 |  
  44. +------+ 
  45. 1 row in set (0.23 sec) 
  46.  
  47. +------+ 
  48. | i    | 
  49. +------+ 
  50. |    5 |  
  51. +------+ 
  52. 1 row in set (0.26 sec) 
  53.  
  54. +------+ 
  55. | i    | 
  56. +------+ 
  57. |    6 |  
  58. +------+ 
  59. 1 row in set (0.29 sec) 
  60.  
  61. +------+ 
  62. | i    | 
  63. +------+ 
  64. |    7 |  
  65. +------+ 
  66. 1 row in set (0.32 sec) 
  67.  
  68. +------+ 
  69. | i    | 
  70. +------+ 
  71. |    8 |  
  72. +------+ 
  73. 1 row in set (0.35 sec) 
  74.  
  75. +------+ 
  76. | i    | 
  77. +------+ 
  78. |    9 |  
  79. +------+ 
  80. 1 row in set (0.37 sec) 
  81.  
  82. +------+ 
  83. | i    | 
  84. +------+ 
  85. |    9 |  
  86. +------+ 
  87. 1 row in set (0.40 sec) 
  88.  
  89. Query OK, 0 rows affected (0.43 sec) 

 

你可能感兴趣的:(游标,表名变量)