Множественные результаты
Результатом является то, что возвращается источником данных после выполнения инструкции. ODBC имеет два типа результатов: результирующие наборы и счетчики строк. Количество строк — это количество строк, затронутых инструкцией обновления, удаления или вставки. Пакеты, описанные в пакетах инструкций SQL, могут создавать несколько результатов.
В следующей таблице перечислены параметры SQLGetInfo , которые приложение использует для определения того, возвращает ли источник данных несколько результатов для каждого типа пакета. В частности, источник данных может возвращать одно число строк для всего пакета инструкций или отдельных счетчиков строк для каждой инструкции в пакете. В случае инструкции создания результирующих наборов, выполняемой с массивом параметров, источник данных может возвращать один результирующий набор для всех наборов параметров или отдельных результирующих наборов для каждого набора параметров.
Тип пакетной службы | Количество строк | Результирующие наборы |
---|---|---|
Явный пакет | SQL_BATCH_ROW_COUNT[a] | --[b] |
Процедура | SQL_BATCH_ROW_COUNT[a] | --[b] |
Массивы параметров | SQL_PARAM_ARRAYS_ROW_COUNTS | SQL_PARAM_ARRAYS_SELECTS |
[a] Операторы подсчета строк в пакете могут поддерживаться, но возврат счетчиков строк не поддерживается. Параметр 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 указывает, что был создан хотя бы один результирующий набор или число, и что пакет не был прерван.