Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Результатом является то, что возвращается источником данных после выполнения инструкции. ODBC имеет два типа результатов: результирующие наборы и счетчики строк. Количество строк — это количество строк, затронутых инструкцией обновления, удаления или вставки. Пакеты, описанные в пакетах инструкций SQL, могут создавать несколько результатов.
В следующей таблице перечислены параметры SQLGetInfo , которые приложение использует для определения того, возвращает ли источник данных несколько результатов для каждого типа пакета. В частности, источник данных может возвращать одно число строк для всего пакета инструкций или отдельных счетчиков строк для каждой инструкции в пакете. В случае инструкции создания результирующих наборов, выполняемой с массивом параметров, источник данных может возвращать один результирующий набор для всех наборов параметров или отдельных результирующих наборов для каждого набора параметров.
| Тип пакетного процесса | Количество строк | Результирующие наборы |
|---|---|---|
| Явный пакет | SQL_BATCH_ROW_COUNT[a] | --[b] |
| Procedure | SQL_BATCH_ROW_COUNT[a] | --[b] |
| Массивы параметров | SQL_PARAM_ARRAYS_ROW_COUNTS | SQL_PARAM_ARRAYS_SELECTS |
Операции по подсчету строк в пакете могут поддерживаться, но возврат числа строк не поддерживается. Параметр SQL_BATCH_SUPPORT в SQLGetInfo указывает, разрешены ли инструкции подсчета строк в пакетах; Параметр SQL_BATCH_ROW_COUNTS указывает, возвращаются ли эти счетчики строк приложению.
[b] Явные пакеты и процедуры всегда возвращают несколько наборов результатов, если они включают несколько инструкций, генерирующих наборы результатов.
Замечание
Параметр SQL_MULT_RESULT_SETS, представленный в ODBC 1.0, предоставляет только общие сведения о том, можно ли возвращать несколько результирующих наборов. В частности, оно имеет значение "Y", если SQL_BS_SELECT_EXPLICIT или SQL_BS_SELECT_PROC биты возвращаются для SQL_BATCH_SUPPORT или если SQL_PAS_BATCH возвращается для SQL_PARAM_ARRAYS_SELECT.
Для обработки нескольких результатов приложение вызывает SQLMoreResults. Эта функция удаляет текущий результат и делает следующий результат доступным. Он возвращает SQL_NO_DATA, если нет дополнительных результатов. Например, предположим, что следующие высказывания выполняются в пакетном режиме:
SELECT * FROM Parts WHERE Price > 100.00;
UPDATE Parts SET Price = 0.9 * Price WHERE Price > 100.00
После выполнения этих инструкций приложение извлекает строки из результированного набора, созданного инструкцией SELECT . Когда завершится получение строк, он вызывает SQLMoreResults, чтобы сделать доступным количество частей, которые были переценены. При необходимости SQLMoreResults удаляет неполученные строки и закрывает курсор. Затем приложение вызывает SQLRowCount, чтобы определить, сколько частей было перепрайсено оператором UPDATE.
Это зависит от драйвера, выполняется ли всё пакетное выражение до того, как будут доступны результаты. В некоторых реализациях это так; в других вызов SQLMoreResults активирует выполнение следующего оператора в пакете.
Если одна из инструкций в пакете завершается сбоем, SQLMoreResults возвращает SQL_ERROR или SQL_SUCCESS_WITH_INFO. Если пакет был прерван при сбое инструкции или не удалось выполнить последнюю инструкцию в пакете, SQLMoreResults вернет SQL_ERROR. Если пакет не был прерван при сбое инструкции и сбойная инструкция не является последней в пакете, SQLMoreResults вернет SQL_SUCCESS_WITH_INFO. SQL_SUCCESS_WITH_INFO указывает, что был создан хотя бы один результирующий набор или число, и что пакет не был прерван.