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

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介:
 
  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) 

 















本文转自hcymysql51CTO博客,原文链接: http://blog.51cto.com/hcymysql/1046929,如需转载请自行联系原作者


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
10月前
|
存储 SQL 编译器
【YashanDB知识库】列与存储过程中重名变量/别名问题
在SQL查询或存储过程中,若出现重复别名或变量名与别名相同,会导致报错。此问题已在多个客户现场发生,风险在于报错难以定位。截止2024年4月,最新版本仍存在该问题。原因是变量未分层处理。解决方法是修改变量名称以避免重名。建议编写SQL时区分变量名,防止重名导致的问题。
|
存储 SQL 数据库
数据库sql语句-----游标和存储过程
数据库sql语句-----游标和存储过程
194 1
|
存储 SQL Oracle
02-PostgreSQL 存储过程的进阶介绍(含游标、错误处理、自定义函数、事务)
02-PostgreSQL 存储过程的进阶介绍(含游标、错误处理、自定义函数、事务)
|
存储 SQL 关系型数据库
MySQL存储过程_触发器_游标——Baidu Comate
MySQL存储过程_触发器_游标——Baidu Comate
186 0
|
存储 关系型数据库 MySQL
MySQL数据库——存储过程-游标(介绍-声明游标、打开游标、获取游标记录、关闭游标,案例)
MySQL数据库——存储过程-游标(介绍-声明游标、打开游标、获取游标记录、关闭游标,案例)
1142 0
|
存储 SQL 关系型数据库
MySQL数据库——存储过程-变量(系统变量、用户定义变量、局部变量)
MySQL数据库——存储过程-变量(系统变量、用户定义变量、局部变量)
1347 0
|
存储 关系型数据库 MySQL
Mysql存储过程查询结果赋值到变量
Mysql存储过程查询结果赋值到变量
357 0
|
存储 关系型数据库 MySQL
mysql 存储过程游标 循环输出select 查询结果
mysql 存储过程游标 循环输出select 查询结果
336 0
|
存储 SQL 定位技术
数据库基础(六):T-SQL语言程序设计、游标定义与使用及存储过程创建与信息查找
数据库基础(六):T-SQL语言程序设计、游标定义与使用及存储过程创建与信息查找
286 1
|
存储 SQL Oracle