0

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

现在,我面临的问题是超时函数计划在 10 秒后终止线程,而且它做得很好。但是,它无法确定 oracle 查询在终止时是否仍处于等待状态,或者它正在返回结果/正在执行过程/等等……

我想要的是一个功能/机制/任何能够查询启动的 oracle 查询的状态并执行以下操作的功能/机制/任何东西:10 秒后,

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 函数调用将是最好的选择,而不是使用复杂的代码。

4

1 回答 1

0

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

于 2012-05-06T09:55:13.670 回答