MySql存储过程中执行动态SQL(表名是变量)
2017-05-29 00:00
337 查看
项目中要显示每个表的记录条数,但是因为数据库中的索引表中(infomation_schema.tables)记录的每个表的数据条数不是那么实时(超过3w多就不准了),所以要手动持久化一下再显示,持久化的过程中需要把表名作为参数,所以只能用动态SQL执行,以下就是一个例子:
CREATE DEFINER=`root`@`%` PROCEDURE `XXXXXX` BEGIN -- By Minghan Sui, 由于information_schema.TABLES 表统计的记录数不完全准确, -- 所以建立此存储过程定时更新元数据表中的记录数record_number -- 循环标识 DECLARE Done INT DEFAULT 0; -- 元数据ID DECLARE meta_id VARCHAR(36); -- 元数据 表名称 DECLARE meta_table_name VARCHAR(100); -- 声明游标 DECLARE C_META CURSOR FOR SELECT id, table_name FROM info_metadata_table; -- 当下一条没数据时 Done设置成1 DECLARE CONTINUE HANDLER FOR NOT FOUND SET Done = 1; -- 打开游标 OPEN C_META; -- 逐个取出当前记录字段的值 FETCH C_META INTO meta_id, meta_table_name; -- 遍历数据表 WHILE Done <> 1 DO -- 动态SQL查询出记录数放在变量meta_rows里 SET @sqlstr = concat("SELECT COUNT(1) INTO @META_ROWS FROM ", meta_table_name); PREPARE p_sqlstr FROM @sqlstr; EXECUTE p_sqlstr; DEALLOCATE PREPARE p_sqlstr; -- 更新记录数 UPDATE info_metadata_table SET record_number = @META_ROWS WHERE id = meta_id; -- 获取下一条游标信息 FETCH C_META INTO meta_id, meta_table_name; END WHILE; -- 关闭游标 CLOSE C_META; END
相关文章推荐
- mysql 存储过程动态执行sql语句
- mysql 存储过程动态执行sql 例子
- MySql带参数的存储过程编写(动态执行SQL语句)
- mysql存储过程动态执行sql
- mysql存储过程执行动态sql语句
- MySQL存储过程中实现执行动态SQL语句的方法
- MySql带参数的存储过程编写(动态执行SQL语句)
- mysql存储过程执行动态sql语句并返回值
- mysql存储过程执行动态sql
- 存储过程返回参数的方法(也是执行动态sql 实现列名成为变量的功能)
- MySQL存储过程中实现执行动态SQL语句的方法
- MySQL 存储过程中执行动态 SQL 语句
- MySQL 存储过程中执行动态SQL语句的方法
- mysql存储过程执行动态sql
- mysql 存储过程 根据参数 动态执行sql语句
- MySql带参数的存储过程编写(动态执行SQL语句)
- MySql带参数的存储过程编写(动态执行SQL语句)
- MySQL 存储过程中执行动态SQL语句的方法
- mysql存储过程执行动态sql语句
- mysql 存储过程动态拼接sql并执行赋值