mysql存储过程《3》

首先说明一下使用的存储过程功能效果:

查询数据源表中的各个表名字段,根据表名查询各个表,统计各个表中的数据量,然后更新数据源表。

数据源表大致情况如图:



 存储过程:

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资源;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

链诸葛

真爱了。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值