MySQL存储过程中如何打印SELECT DISTINCT ID FROM import子查询行数
解决方案
可以通过声明存储过程局部变量存储子查询的返回行数实现需求,修改后的完整存储过程如下:
CREATE PROCEDURE `UpdateUsers`() BEGIN -- 声明变量存储子查询返回行数 DECLARE import_distinct_id_count INT DEFAULT 0; DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN SHOW ERRORS; ROLLBACK; END; START TRANSACTION; -- 将子查询的行数写入变量 SELECT COUNT(DISTINCT ID) INTO import_distinct_id_count FROM import; -- 打印输出行数 SELECT import_distinct_id_count AS 子查询返回的distinct ID行数; -- 原有UPDATE逻辑不变 UPDATE users SET status='A' WHERE id IN (SELECT DISTINCT ID FROM import); COMMIT; END
逻辑说明
- 局部变量
import_distinct_id_count需要放在BEGIN之后所有业务逻辑之前声明,符合MySQL存储过程的变量声明规则 - 赋值语句的统计逻辑和原UPDATE语句中的子查询完全一致,统计结果准确,不会影响原有更新逻辑
- 如果你需要在存储过程外部也能访问这个行数,可以改用会话变量(带
@前缀,不需要提前DECLARE),写法如下:
存储过程执行结束后,直接执行SELECT COUNT(DISTINCT ID) INTO @import_distinct_id_count FROM import;SELECT @import_distinct_id_count;即可查看结果。
内容的提问来源于stack exchange,提问作者user3698799
相关产品推荐
相关产品推荐

