Vários resultados

Um resultado é algo retornado pela fonte de dados depois que uma instrução é executada. O ODBC tem dois tipos de resultados: conjuntos de resultados e contagens de linhas. Contagens de linhas são o número de linhas afetadas por uma instrução de atualização, exclusão ou inserção. Os lotes, descritos em Lotes de instruções SQL, podem gerar vários resultados.

A tabela a seguir lista as opções SQLGetInfo que um aplicativo usa para determinar se uma fonte de dados retorna vários resultados para cada tipo diferente de lote. Em particular, uma fonte de dados pode retornar uma única contagem de linhas para todo o lote de instruções ou contagens de linhas individuais para cada instrução no lote. No caso de uma instrução geradora de conjunto de resultados executada com uma matriz de parâmetros, a fonte de dados pode retornar um único conjunto de resultados para todos os conjuntos de parâmetros ou conjuntos de resultados individuais para cada conjunto de parâmetros.

Tipo de lote Contagens de linhas Conjuntos de resultados
Lote explícito SQL_BATCH_ROW_COUNT[a] –[b]
Procedimento SQL_BATCH_ROW_COUNT[a] –[b]
Matrizes de parâmetros SQL_PARAM_ARRAYS_ROW_COUNTS SQL_PARAM_ARRAYS_SELECTS

[a] Instruções geradoras de contagem de linhas em um lote podem ser suportadas, mas o retorno das contagens de linha não é suportado. A opção SQL_BATCH_SUPPORT em SQLGetInfo indica se as instruções geradoras de contagem de linhas são permitidas em lotes, a opção SQL_BATCH_ROW_COUNTS indica se essas contagens de linha são retornadas ao aplicativo.

[b] Lotes e procedimentos explícitos sempre retornam vários conjuntos de resultados quando incluem várias instruções geradoras de conjuntos de resultados.

Observação

A opção SQL_MULT_RESULT_SETS introduzida no ODBC 1.0 fornece apenas informações gerais sobre se vários conjuntos de resultados podem ser retornados. Em particular, ele é definido como "Y" se os bits SQL_BS_SELECT_EXPLICIT ou SQL_BS_SELECT_PROC forem retornados para SQL_BATCH_SUPPORT ou se SQL_PAS_BATCH for retornado para SQL_PARAM_ARRAYS_SELECT.

Para processar vários resultados, um aplicativo chama SQLMoreResults. Essa função descarta o resultado atual e disponibiliza o próximo resultado. Ele retorna SQL_NO_DATA quando não há mais resultados disponíveis. Por exemplo, suponha que as seguintes instruções sejam executadas como um lote:

SELECT * FROM Parts WHERE Price > 100.00;  
UPDATE Parts SET Price = 0.9 * Price WHERE Price > 100.00  

Depois que essas instruções são executadas, o aplicativo busca linhas do conjunto de resultados criado pela instrução SELECT. Quando termina de buscar linhas, ele chama SQLMoreResults para disponibilizar o número de peças que foram reprecificadas. Se necessário, SQLMoreResults descarta linhas não buscadas e fecha o cursor. Em seguida, o aplicativo chama SQLRowCount para determinar quantas partes foram reprecificadas pela instrução UPDATE.

É específico do driver se a instrução de lote inteira é executada antes que qualquer resultado esteja disponível. Em algumas implementações, esse é o caso; em outros, chamar SQLMoreResults dispara a execução da próxima instrução no lote.

Se uma das instruções em um lote falhar, SQLMoreResults retornará SQL_ERROR ou SQL_SUCCESS_WITH_INFO. Se o lote foi anulado quando a instrução falhou ou a instrução com falha foi a última instrução no lote, SQLMoreResults retornará SQL_ERROR. Se o lote não foi anulado quando a instrução falhou e a instrução com falha não foi a última instrução no lote, SQLMoreResults retornará SQL_SUCCESS_WITH_INFO. SQL_SUCCESS_WITH_INFO indica que pelo menos um conjunto de resultados ou contagem foi gerado e que o lote não foi anulado.