Compartir a través de


Varios resultados

Un resultado es algo devuelto por el origen de datos después de ejecutar una instrucción. ODBC tiene dos tipos de resultados: conjuntos de resultados y recuentos de filas. Los recuentos de filas son el número de filas afectadas por una instrucción update, delete o insert. Los lotes, descritos en Lotes de instrucciones SQL, pueden generar varios resultados.

En la tabla siguiente se enumeran las opciones de SQLGetInfo que usa una aplicación para determinar si un origen de datos devuelve varios resultados para cada tipo de lote diferente. En concreto, un origen de datos puede devolver un recuento de filas único para todo el lote de instrucciones o recuentos de filas individuales para cada instrucción del lote. En el caso de una instrucción de generación de conjuntos de resultados ejecutada con una matriz de parámetros, el origen de datos puede devolver un único conjunto de resultados para todos los conjuntos de parámetros o conjuntos de resultados individuales para cada conjunto de parámetros.

Tipo de lote Recuentos de filas Conjuntos de resultados
Lote explícito SQL_BATCH_ROW_COUNT[a] --[b]
Procedimiento SQL_BATCH_ROW_COUNT[a] --[b]
Matrices de parámetros SQL_PARAM_ARRAYS_ROW_COUNTS SQL_PARAM_ARRAYS_SELECTS

[a] Se pueden admitir instrucciones de generación de recuento de filas en un lote, pero no se admite la devolución de los recuentos de filas. La opción SQL_BATCH_SUPPORT en SQLGetInfo indica si se permiten instrucciones de generación de recuento de filas en lotes; La opción SQL_BATCH_ROW_COUNTS indica si estos recuentos de filas se devuelven a la aplicación.

[b] Los lotes y procedimientos explícitos siempre devuelven varios conjuntos de resultados cuando incluyen varias instrucciones de generación de conjuntos de resultados.

Nota:

La opción SQL_MULT_RESULT_SETS introducida en ODBC 1.0 solo proporciona información general sobre si se pueden devolver varios conjuntos de resultados. En concreto, se establece en "Y" si los bits SQL_BS_SELECT_EXPLICIT o SQL_BS_SELECT_PROC se devuelven para SQL_BATCH_SUPPORT o si se devuelve SQL_PAS_BATCH para SQL_PARAM_ARRAYS_SELECT.

Para procesar varios resultados, una aplicación llama a SQLMoreResults. Esta función descarta el resultado actual y hace que el siguiente resultado esté disponible. Devuelve SQL_NO_DATA cuando no hay más resultados disponibles. Por ejemplo, supongamos que las siguientes instrucciones se ejecutan como un lote:

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

Una vez ejecutadas estas instrucciones, la aplicación captura las filas del conjunto de resultados creado por la instrucción SELECT . Cuando se realiza la captura de filas, llama a SQLMoreResults para disponer del número de partes que fueron repriciadas. Si es necesario, SQLMoreResults descarta las filas no capturadas y cierra el cursor. A continuación, la aplicación llama a SQLRowCount para determinar cuántas partes repreció la instrucción UPDATE.

Depende del controlador si se ejecuta toda la instrucción por lotes antes de que haya resultados disponibles. En algunas implementaciones, este es el caso; en otros, la llamada a SQLMoreResults desencadena la ejecución de la siguiente instrucción en el lote.

Si se produce un error en una de las instrucciones de un lote, SQLMoreResults devolverá SQL_ERROR o SQL_SUCCESS_WITH_INFO. Si el lote se anuló cuando se produjo un error en la instrucción o la instrucción failed fue la última instrucción del lote, SQLMoreResults devolverá SQL_ERROR. Si el lote no se anuló cuando se produjo un error en la instrucción y la instrucción failed no era la última instrucción del lote, SQLMoreResults devolverá SQL_SUCCESS_WITH_INFO. SQL_SUCCESS_WITH_INFO indica que se generó al menos un conjunto de resultados o un recuento y que el lote no se anuló.