返回首页

gbase数据、南大通用产品文档:GBase8a存储过程无法获取sql 执行行数问题

更新日期:2024年09月11日

问题现象
使用存储过的out 参数获取动态sql 执行的影响行数时,row_count()返回值为-1,
无法准确获取到sql 执行的行数。
解决方法
因为存储过程中使用了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;

执行查询,并返回一个GBaseDataReader 对象,可读取一行的所有列数据。


重载列表
1) 使GBaseConnection 执行CommandText 属性指定的SQL 语句,并用返
回值构建GBaseDataReader。
ExecuteReader()
2) 使GBaseConnection 执行CommandText 属性指定的SQL 语句,并使用
CommandBehavior 的一个值构建GBaseDataReader。
ExecuteReader(CommandBehavior)

对象的平均大小(SQL 管理 API)
随同 admin() 或 task() 函数,使用 set sbspace avg_lo_size 参数来指定在指定的 sbspace
中智能大对象的预期平均大小,以便数据库服务器可计算元数据区的大小。
语法

元素
描述
关键考虑
sbspace
sbspace 的名称。

average_size
该 sbspace 中智能大对象的平均大小,
以 KB 为单Windows™:4 至

GBase 8s 管理员参考
南大通用数据技术股份有限公司 - 803 -
元素
描述
关键考虑
位。
2**31
UNIX™:2 至 2**31

用法
这个函数等同于 onspaces -ch 命令。
示例
下列示例设置名为 sbsp1 的 sbspace 中智能大对象的预期平均大小为 8 KB:
EXECUTE FUNCTION task("set sbspace avg_lo_size","sbsp1","8");