Как получить статус запроса оракула в Pro*C?

Мой код запускает запрос oracle select на сервере. Сервер может быть свободен или может быть занят в определенное время. Сейчас я создаю механизм тайм-аута в Pro*C, который истекает через 10 секунд и отменяет поток, который выполнял запрос оракула (если он все еще работает).

Теперь проблема, с которой я столкнулся, заключается в том, что функция тайм-аута должна завершать потоки через 10 секунд, и она делает это очень хорошо. Однако он не может понять, был ли запрос оракула все еще в состоянии ожидания во время завершения или он возвращал результаты/выполнение процедуры/бла-бла...

Мне нужна функция/механизм/что-нибудь, что могло бы запрашивать статус инициированного запроса оракула и действовать следующим образом: через 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 был бы лучшим вариантом вместо использования сложного кода, если это возможно.


person SP Sandhu    schedule 23.08.2011    source источник


Ответы (1)


Что для вас означает «извлечение данных/некоторая обработка»? В общем, поскольку Oracle выполняет запрос по мере того, как приложение извлекает данные, запрос будет чередоваться между активным выполнением (что предполагает нахождение в состоянии ожидания) и возвратом данных клиенту. Например, если вы отправляете клиенту 50 строк за раз, Oracle выполняет запрос только настолько далеко, чтобы идентифицировать первые 50 строк, отправляет эти строки клиенту и ждет, пока клиент запросит следующие 50 строк. прежде чем продолжить выполнение запроса, чтобы получить следующие 50 строк.

person Justin Cave    schedule 06.05.2012