angularjs 如何检索oracle sql查询的进度?

euoag5mw  于 2023-11-16  发布在  Angular
关注(0)|答案(3)|浏览(149)

我有个编码问题解决不了。
要求是显示SQL查询的进度。我使用Sping Boot 和Angularjs,所以想法是显示SQL到UI的进度,不需要是真实的时间,但首选。基本上用户点击UI上的按钮,它将触发API从数据库检索数据,然后将完成的数据返回到UI。
我们有一个计算量很大的SQL,需要很长时间才能完成。当我们想要检索的行大约是1000万时,大约需要15分钟。我们希望显示SQL的进度,以便用户了解它需要多长时间。因此,我们的想法是检查有多少行已经完成:
假设检索到100万,那么它应该返回10%,以此类推。下一个100万,然后是20%。
我不知道该怎么办。需要一些建议。
先谢了。

7rtdyuoh

7rtdyuoh1#

假设这是一个长时间的select调用,你可以运行以下查询来获取一个长时间运行的语句的统计信息:

select  * from v$session_longops  where time_remaining > 0 and sid = ???

字符串
sid value应该被替换为运行长查询的session的oracle session id。你可以通过查看v$session来确定。你需要在一个单独的线程中执行上面的查询(或者Spring中的任何并发执行单元)。

pvabu6sv

pvabu6sv2#

谢谢大家.我已经尝试使用OldProgrammer的解决方案,但未能做到这一点.不知何故,我只是不能检索Hibernate sesison ID,和所有相关的职位,我发现要么太旧或只是手动创建新的会话,我不想要.
我对这个问题做了一些工作,但不是解决方案。
所以我所做的是,对于那个复杂的SQL,首先我做了总计数,然后将其分成100个块。然后随着每个块的完成(分页),我将更新完成百分比。同时,在UI上,我将有时间间隔来检查来自不同API端点的此SQL的进度,目前我将其设置为每2秒。
所以结果是这样的,对于相当少量的行,每次API调用,它将从2%跳到6%;对于大量的行,只有在几次API进度检查后,它将从1%跳到2%。
这不是一个干净的解决方案,但它做了它的目的,它会给给予用户一些想法,需要多长时间才能完成。

gpfsuwkq

gpfsuwkq3#

以下是一些变通方法
1.在DB中创建作业,运行您的代码,设置它auto_drop = true并运行它
1.作业活动时循环
1.在循环中计算你所期望的“从上方”

相关问题