Как получить статус запроса оракула в Pro*C?
Мой код выполняет запрос выбора оракула на сервере. Сервер может быть свободен или может быть занят в определенное время. Теперь я использую механизм тайм-аута в 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, вместо использования сложного кода, если это возможно.
1 ответ
Что для вас означает "получение данных / некоторая обработка"? В общем, поскольку Oracle выполняет запрос, когда приложение извлекает данные, запрос будет чередоваться между активным выполнением (которое может быть в состоянии ожидания) и возвратом данных клиенту. Например, если вы отправляете 50 строк одновременно клиенту, Oracle только выполняет запрос достаточно далеко, чтобы определить первые 50 строк, он отправляет эти строки клиенту и ожидает, пока клиент запросит следующие 50 строк. прежде чем продолжить выполнение запроса, вытащите следующие 50 строк.