存储过程无法获取sql执行行数问题

使用存储过程的out参数获取动态sql执行的影响行数时,row_count()返回值为-1,无法准确获取到sql执行的行数;

1 回答

因为存储过程中使用了prepare动态sql,在获取row_count()之前又进行了prepare statement的释放,导致了无法获取prepare执行的sql影响行数。
存储过程示例及错误场景说明如下:
DELIMITER //
CREATE  PROCEDURE "executeSQL"(in S_SQL_TMP  varchar(10922),out count_char int)
BEGIN
     set @sql = S_SQL_TMP;
         PREPARE s1 FROM @sql;
         EXECUTE s1;
         -- deallocate prepare s1;
         -- 在获取row_count()值之前,销毁了prepare statement,错误的用法
        select row_count() into count_char;
         deallocate prepare s1;
         -- 获取到row_count()值之后,再执行deallocate prepare命令
END //
DELIMITER ;
-- 测试返回正确的影响行数
call executeSQL('insert into t2 select * from t1',@r_count);
select @r_count;

2018-8-9 14:39

撰写回答

您需要登录后才可以回帖 登录 | 立即注册

提问者

发布127
回答342

相关问题

相关资料