Последний параметр функции CLI SQLBindFileToParam() - IndicatorValue - описан как "output (deferred)". На самом деле он "input (deferred)".
К Главе 5 "DB2 CLI Functions" надо добавить следующий текст:
Спецификация: DB2 CLI 7.x
SQLRETURN SQLNextResult (SQLHSTMT StatementHandle1 SQLHSTMT StatementHandle2);
Табл. 14. Аргументы SQLNextResult
Тип данных | Аргумент | Использование | Описание |
---|---|---|---|
SQLHSTMT | StatementHandle | входной | Хэндл оператора. |
SQLHSTMT | StatementHandle | входной | Хэндл оператора. |
Хранимая процедура возвращает несколько наборов результатов, оставляя после выхода один или несколько указателей открытыми. Доступ к первому набору результатов всегда осуществляется путем использования хэндла оператора, вызвавшего хранимую процедуру. Если возвращается несколько наборов результатов, для описания и считывания набора результатов можно использовать либо 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() не поддерживает такой способ. |
Табл. 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(). |
Для параметризованных запросов можно использовать только SQLMoreResults().