Notas del release

36.7 Capítulo 5. Funciones de CLI de DB2

36.7.1 SQLBindFileToParam - Vincular referencia de archivo LOB a parámetro de LOB

El último parámetro - IndicatorValue - de la función de CLI SQLBindFileToParam() se documenta actualmente como "salida (diferida)". Debe ser "entrada (diferida)".

36.7.2 SQLNextResult - Asociar el conjunto de resultados siguiente con otro descriptor de contexto de sentencias

Debería añadirse el texto siguiente al Capítulo 5, "Funciones CLI de DB2":

36.7.2.1 Objetivo

Especificación: DB2 CLI 7.x

36.7.2.2 Sintaxis

SQLRETURN   SQLNextResult   (SQLHSTMT	StatementHandle1
                             SQLHSTMT	StatementHandle2);

36.7.2.3 Argumentos de función


Tabla 25. Argumentos de SQLNextResult
Tipo de datos Argumento Utilización Descripción
SQLHSTMT StatementHandle entrada Descriptor de contexto de sentencias.
SQLHSTMT StatementHandle entrada Descriptor de contexto de sentencias.

36.7.2.4 Utilización

Un procedimiento almacenado devuelve varios conjuntos de resultados dejando uno o más cursores abiertos después de salir. Al primer conjunto de resultados se accede siempre utilizando el descriptor de contexto de sentencias que llamó al procedimiento almacenado. Si se devuelven varios conjuntos de resultados, puede utilizarse SQLMoreResults() o SQLNextResult() para describir y captar el conjunto de resultados.

SQLMoreResults() se utiliza para cerrar el cursor para el primer conjunto de resultados y permitir que se procese el conjunto de resultados siguiente, en tanto que SQLNextResult() desplaza el siguiente conjunto de resultados a StatementHandle2, sin cerrar el cursor en StatementHandle1. Ambas funciones devuelven SQL_NO_DATA_FOUND si no hay conjuntos de resultados que haya que captar.

La utilización de SQLNextResult() permite el proceso de los conjuntos de resultados en el orden que sea una vez se hayan transferido a otros descriptores de contexto de sentencias. Las llamadas mixtas a SQLMoreResults() y SQLNextResult() se permiten hasta que no haya más cursores (conjuntos de resultados abiertos) en StatementHandle1.

Cuando SQLNextResult() devuelve SQL_SUCCESS, el conjunto de resultados siguiente ya no está asociado con StatementHandle1. En su lugar, el conjunto de resultados siguiente se asocia con StatementHandle2, como si una llamada a SQLExecDirect() hubiera acabado de ejecutar satisfactoriamente una consulta sobre StatementHandle2. Por tanto, el cursor puede describirse utilizando SQLNumResultSets(), SQLDescribeCol() o SQLColAttribute().

Una vez se ha llamado a SQLNextResult(), el conjunto de resultados que en este momento está asociado con StatementHandle2 se elimina de la cadena de conjuntos de resultados restantes y no podrá utilizarse de nuevo ni en SQLNextResult() ni en SQLMoreResults(). Esto significa que para 'n' conjuntos de resultados, SQLNextResult() puede llamarse satisfactoriamente la mayoría de las horas 'n-1'.

Si SQLFreeStmt() se llama con la opción SQL_CLOSE, o SQLFreeHandle() se llama con HandleType establecido en SQL_HANDLE_STMT, se descartan todos los conjuntos de resultados pendientes sobre este descriptor de contexto de sentencias.

SQLNextResult() devuelve SQL_ERROR si StatementHandle2 tiene un cursor abierto o el caso de que StatementHandle1 y StatementHandle2 no estén en la misma conexión. Si se devuelve algún error o aviso, SQLError() debe llamarse siempre en StatementHandle1.

Nota:
SQLMoreResults() también funciona con una consulta parametrizada con una matriz de valores de parámetros de entrada especificados con SQLParamOptions() y SQLBindParameter(). Sin embargo, SQLNextResult() no da soporte a esta opción.

36.7.2.5 Códigos de retorno

36.7.2.6 Diagnósticos


Tabla 26. Los SQLSTATE de SQLNextResult
SQLSTATE Descripción Explicación
40003 08S01 Anomalía de enlace de comunicaciones. El enlace de comunicaciones entre la aplicación y la fuente de datos ha fallado antes de que se completara la función.
58004 Anomalía de sistema inesperada. Error de sistema irrecuperable.
HY001 Anomalía de asignación de memoria. DB2 CLI no ha podido asignar la memoria necesaria para dar soporte a la ejecución o cumplimentación de la función.
HY010 Error de secuencia de función.

La función se ha llamado mientras estaba en una operación de datos al ejecutar (SQLParamData(), SQLPutData()).

StatementHandle2 tiene un cursor abierto asociado al mismo.

La función se llamó mientras estaba dentro de una operación BEGIN COMPOUND y END COMPOUND SQL.

HY013 Error de manejo de memoria inesperado. DB2 CLI no ha podido acceder a la memoria necesaria para dar soporte a la ejecución o cumplimentación de la función.
HYT00 Ha caducado el tiempo de espera excedido. El tiempo de espera ha caducado antes de que la fuente de datos devolviera el conjunto de resultados. Los tiempos de espera excedidos sólo están soportados en sistemas no multitarea como por ejemplo 3.1 y Macintosh System 7. El período de tiempo de espera puede establecerse utilizando el atributo SQL_ATTR_QUERY_TIMEOUT para SQLSetConnectAttr().

36.7.2.7 Restricciones

Para las consultas parametrizadas sólo puede utilizarse SQLMoreResults().

36.7.2.8 Referencias


[ Principio de página | Página anterior | Página siguiente ]