Замечания по выпуску


36.7 Глава 5. DB2 CLI Functions

36.7.1 Параметр SQLBindFileToParam - Связать ссылку файла большого объекта с большим объектом

Последний параметр функции CLI SQLBindFileToParam() - IndicatorValue - описан как "output (deferred)". На самом деле он "input (deferred)".

36.7.2 SQLNextResult - Связать следующий набор результатов с другим хэндлом оператора

К Главе 5 "DB2 CLI Functions" надо добавить следующий текст:

36.7.2.1 Назначение

Спецификация: DB2 CLI 7.x

36.7.2.2 Синтаксис

SQLRETURN   SQLNextResult     (SQLHSTMT StatementHandle1
                                    SQLHSTMT StatementHandle2);

36.7.2.3 Аргументы функции


Табл. 14. Аргументы SQLNextResult
Тип данных Аргумент Использование Описание
SQLHSTMT StatementHandle входной Хэндл оператора.
SQLHSTMT StatementHandle входной Хэндл оператора.

36.7.2.4 Использование

Хранимая процедура возвращает несколько наборов результатов, оставляя после выхода один или несколько указателей открытыми. Доступ к первому набору результатов всегда осуществляется путем использования хэндла оператора, вызвавшего хранимую процедуру. Если возвращается несколько наборов результатов, для описания и считывания набора результатов можно использовать либо SQLMoreResults(), либо SQLNextResult().

SQLMoreResults() используется для закрытия указателя для первого набора результатов и позволяет обработку следующего набора результатов, а SQLNextResult() перемещает следующий набор результатов в StatementHandle2 без закрытия указателя при StatementHandle1. Обе функции возвращают SQL_NO_DATA_FOUND, если нет считываемых наборов результатов.

Использование SQLNextResult() позволяет обрабатывать наборы результатов в любом порядке после того, как они были перенесены на другие хэндлы операторов. Смешанные вызовы SQLMoreResults() и SQLNextResult() разрешены до тех пор, пока не исчерпаются указатели (открытые наборы результатов) на StatementHandle1.

Когда SQLNextResult() возвращает SQL_SUCCESS, следующий набор результатов больше не связан с StatementHandle1. Вместо этого следующий набор результатов связывается с StatementHandle2, как если бы SQLExecDirect() только что успешно обработала запрос к StatementHandle2. Поэтому указатель может быть описан с использованием SQLNumResultSets(), SQLDescribeCol() или SQLColAttribute().

После того как была вызвана SQLNextResult(), набор результатов, теперь связанный с StatementHandle2, удаляется из цепочки оставшихся результатов и не может быть снова использован ни в SQLNextResult(), ни в SQLMoreResults(). Это означает, что для 'n' наборов результатов SQLNextResult() может быть вызвана успешно максимум 'n-1' раз.

Если SQLFreeStmt() вызывается с опцией SQL_CLOSE или SQLFreeHandle() вызывается с установленным для HandleType SQL_HANDLE_STMT, все находящиеся в состоянии ожидания на этом хэндле наборы результатов отбрасываются.

SQLNextResult() возвращает SQL_ERROR, если у StatementHandle2 есть открытый указатель или если StatementHandle1 и StatementHandle2 не находятся на одном и том же соединении. Если возвращаются ошибки или предупреждения, SQLError() должна всегда вызываться с StatementHandle1.
Прим.:SQLMoreResults() работает также с параметризованным запросом с массивом значений входных параметров, заданным при помощи SQLParamOptions() и SQLBindParameter(). Однако SQLNextResult() не поддерживает такой способ.

36.7.2.5 Коды возврата

36.7.2.6 Диагностика


Табл. 15. SQLSTATE для SQLNextResult
SQLSTATE Описание Объяснение
40003 08S01 Ошибка связи. Ошибка связи между прикладной программой и источником данных до выполнения функции.
58004 Непредвиденная системная ошибка. Неисправимая системная ошибка.
HY001 Ошибка выделения памяти. DB2 CLI не в состоянии выделить память, необходимую для выполнения или завершения функции.
HY010 Ошибочная последовательность вызова функций.

Функция была вызвана во время операции обработки данных (SQLParamData(), SQLPutData()).

У StatementHandle2 есть открытый связанный с ним указатель.

Функция была вызвана из операции SQL, ограниченной BEGIN COMPOUND и END COMPOUND.

HY013 Непредвиденная ошибка при работе с памятью. CLI DB2 не сумел получить доступ к памяти, необходимой для выполнения или завершения функции.
HYT00 Истек срок ожидания. Истек срок ожидания возврата набора результатов источником данных. Истечение времени поддерживается только в системах без многозадачности, таких как Windows 3.1 и Macintosh System 7. Срок ожидания задается при помощи атрибута SQL_ATTR_QUERY_TIMEOUT для SQLSetConnectAttr().

36.7.2.7 Ограничения

Для параметризованных запросов можно использовать только SQLMoreResults().

36.7.2.8 Ссылки


[ Начало страницы | Страница назад | Страница вперед | Содержание | Индекс ]