Вы не можете сказать изнутри процедуры. OPEN FOR
инструкция:
... связывает переменную курсора с запросом, выделяет ресурсы базы данных для обработки запроса, идентифицирует набор результатов и помещает курсор перед первой строкой набора результатов.
Все, что вы можете измерить в своей процедуре, - это сколько времени потребуется для генерации текста запроса и сколько времени потребуется, чтобы открыть курсор. Затем процедура заканчивается, и вызывающий принимает на себя указатель OUT ref. Отсюда вы ничего не видите о том, что происходит с курсором.
Вызывающий чем (предположительно) извлекает данные, что занимает большую часть времени; но может также выполнять другую обработку. Вам нужно, чтобы вызывающий объект регистрировал время между вызовом вашей процедуры и закрытием курсора ref, когда он закончил с ним, но это все равно будет включать любую дополнительную обработку, которую он выполняет, поэтому вы не можете отделить, сколько на самом деле происходит от обработка и выборка курсорных запросов.
Если это достаточно близко, у вас потенциально может быть вторая процедура, которая закрывает курсор и регистрирует время, если вы не хотите, чтобы вызывающий абонент беспокоился об этом. Вы можете заставить курсор «открыть» записывать время начала в переменной сеанса (делая пакет с сохранением состояния), а процедура «закрытия» извлекает это и вставляет запись в журнал; или попросите «open» выполнить начальную вставку в таблицу регистрации с нулевым временем окончания, а затем «закрыть» обновить эту запись с фактическим временем окончания. Но опять же, это только приблизительное значение.
если вы действительно хотите сделать все это в этой процедуре, вам придется выполнять всю обработку запросов внутри нее, что, вероятно, означает массовый сбор курсора в коллекцию и использование этого типа коллекции в качестве параметра OUT , настраивая вызывающего абонента, чтобы перебирать его вместо курсора. Это, конечно, также требует дополнительных затрат на память, поэтому может быть непрактичным.
person
Alex Poole
schedule
27.03.2018