(本文档仅供参考)
问题说明
存储过程需要先通过逻辑将数据写到一张临时表,然后再通过游标将这张临时表的数据返回,目前发现只要有commit动作,没有等到逻辑处理完成,数据预览时就开始显示游标的返回数据,这就导致数据显示不完整。
以下图的存储过程为例,循环插入一千条数据:
如下图,在数据集中预览数据时多刷新几次后能看到显示的数据不是正确的:
问题原因
目前在系统选项-》数据集的获取总行数选择是的情况下:
数据集预览时该存储过程时,存储过程会被调用两次,一次是查询数据,一次是获取数据总行数。
存储过程执行多次的情况下会因存储过程本身的实现逻辑,例如可能在存储过程里存在多次commit,每次commit完都会返回不同的结果,此时对存储过程进行多次调用时预览的结果每次都可能不一样。
另存储过程本身也存在多人并发操作的可能,此时该存储过程也可能会出现不同的结果。
解决方案
修改存储过程,两种方式,一个是生成session级别的临时表,另一个是在表中添加随机数,在进行查询时匹配对应的随机数的方式避免存储过程存在多次执行的可能。