如何在Pro*C中获取oracle查询状态



我的代码在服务器上运行oracle select查询。服务器可能是空闲的,也可能在某些时候很忙。现在我正在做的是一个超时机制,在Pro*C超时后10秒,并取消正在运行oracle查询的线程(如果它还在运行)。

现在,我面临的问题是超时函数被安排在10秒后终止线程,它做得很好。但是,无法判断oracle查询在终止时是否仍处于等待状态,还是正在返回结果/执行过程/等等…

我想要的是一个函数/机制/任何东西,将能够查询oracle查询启动的状态,并采取如下行动:

IF (query is still in waiting state)
    DO terminate all threads;
ELSE IF (query is fetching data/doing some processing)
    DO wait for the fetching/processing to complete and then terminate all threads;

Pro*C或Oracle函数调用将是最好的选择,而不是使用复杂的代码,如果可能的话。

"获取数据/做一些处理"对你来说意味着什么?通常,由于Oracle在应用程序获取数据时执行查询,因此查询将在主动运行(这将涉及处于等待状态)和向客户端返回数据之间交替进行。例如,如果你一次发送50行给客户端,Oracle只执行足够远的查询来识别前50行,它将这些行发送给客户端,并等待客户端请求接下来的50行,然后继续执行查询来提取接下来的50行。

最新更新