mysql存储过程《3》 博客分类: MySQL mysql存储过程mysql游标mysql循环mysql动态使用表名mysql预处理PREPARE
程序员文章站
2024-03-11 18:34:07
...
首先说明一下使用的存储过程功能效果:
查询数据源表中的各个表名字段,根据表名查询各个表,统计各个表中的数据量,然后更新数据源表。
数据源表大致情况如图:
存储过程:
DROP PROCEDURE IF EXISTS updateDataSource; CREATE PROCEDURE updateDataSource () BEGIN DECLARE dataSize INT DEFAULT 0; DECLARE tableName VARCHAR (30); DECLARE done INT DEFAULT FALSE; DECLARE tableList CURSOR FOR SELECT data_table FROM data_source; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; OPEN tableList; read_loop : LOOP FETCH tableList INTO tableName; IF done THEN LEAVE read_loop; END IF; SET @STMT := CONCAT( "SELECT count(*) INTO @dataSize", " FROM ", tableName, ";" ); PREPARE STMT FROM @STMT; EXECUTE STMT; DEALLOCATE PREPARE STMT; UPDATE data_source SET DATA_SIZE = @dataSize WHERE DATA_TABLE = tableName; END LOOP ; CLOSE tableList; END
存储过程说明:
1.在LOOP循环中取游标中的值,获取各个表明;
2.为了能在存储过程中动态使用表名,定义了一个sql语句@STMT,使用函数拼接,并且把sql语句执行结果赋值给变量,以便后续使用;
3.PREPARE STMT FROM @STMT,预处理sql,作用域是当前客户端连接会话可见;EXECUTE STMT执行预处理的sql,如果执行的STMT不存在或没定义将会报错;DEALLOCATE PREPARE STMT释放预处理的sql资源;
推荐阅读
-
mysql存储过程《2》续 博客分类: MySQL mysql存储过程mysql游标mysql循环mysql使用whilemysql使用repeat
-
mysql存储过程《3》 博客分类: MySQL mysql存储过程mysql游标mysql循环mysql动态使用表名mysql预处理PREPARE
-
mysql存储过程《2》 博客分类: MySQL mysql存储过程mysql游标mysql循环
-
mysql数据库存储过程游标循环,提前退出 博客分类: mysql 存储过程游标循环失败动态sql增加字段
-
Mysql存储过程循环内嵌套使用游标示例代码
-
Mysql存储过程循环内嵌套使用游标示例代码
-
mysql存储过程 游标 循环使用介绍
-
MYSQL存储过程游标错误:No data - zero rows fetched, selected, or processed 博客分类: DB-mysql mysqlproducurecursor
-
mysql 存储过程中使用了游标和临时表,返回的临时表数据不准确
-
Mysql存储过程循环内嵌套使用游标示例代码