暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

路易十四猪 2022-06-30
466

问题现象
使用存储过的 out 参数获取动态 sql 执行的影响行数时, row_count() 返回值为 -1 ,
无法准确获取到 sql 执行的行数。
解决方法
因为存储过程中使用了 prepare 动态 sql ,在获取 row_count() 之前又进行了 prepare
statement 的释放,导致了无法获取 prepare 执行的 sql 影响行数。
存储过程示例及错误场景说明如下: GBase 8a MPP Cluster FAQ FAQ
文档版本(2021-04-02) 南大通用数据技术股份有限公司
71
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;
————————————————
版权声明:本文为CSDN博主「m0_49291452」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_49291452/article/details/125540474

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论