博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySql存储过程中执行动态SQL(表名是变量)
阅读量:6830 次
发布时间:2019-06-26

本文共 1237 字,大约阅读时间需要 4 分钟。

hot3.png

项目中要显示每个表的记录条数,但是因为数据库中的索引表中(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

 

转载于:https://my.oschina.net/MinghanSui/blog/911048

你可能感兴趣的文章
MySQL创建用户以及授权、常用SQL语句、 MySQL数据库备份恢复
查看>>
java并发编程-线程与进程
查看>>
利用FFmpeg和管道(pipe),解决非URL和非文件的输入形式
查看>>
Bootstrap做简单的网站首页
查看>>
iptables规则备份和恢复/firewalld的9个zone
查看>>
第2章对象及变量的并发访问
查看>>
how to play smileys
查看>>
强制退出Mac程序的六种方法
查看>>
使用传统方式命名网上,eth0,eth1
查看>>
webpack4.0各个击破(1)—— html部分
查看>>
205LinkList
查看>>
专注反射内存实时网和交换机
查看>>
SpringMVC框架笔记整理(一): SpringMVC详细运行流程
查看>>
手持终端的种类分为工业及消费应用
查看>>
libpcap详解
查看>>
我的友情链接
查看>>
AIX常规检查与排错
查看>>
Drupal7主题初步设置篇-Ubuntu 14.04 LTS
查看>>
我的友情链接
查看>>
JMEditor V0.9.4开源在线公式编辑器全面支持主流浏览器
查看>>