Поделиться через


Множественные результаты

Результатом является то, что возвращается источником данных после выполнения инструкции. 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 указывает, что был создан хотя бы один результирующий набор или число, и что пакет не был прерван.