Especificación: | CLI de DB2 2.1 | ODBC 2.0 |
SQLBindParameter() se utiliza para asociar (enlazar) marcadores de parámetros de una sentencia de SQL con variables de aplicación, para todos los tipos de datos C. En este caso, se transfieren datos de la aplicación al DBMS cuando se invoca SQLExecute() o SQLExecDirect(). Durante la transferencia de datos puede producirse una conversión de los datos.
Sintaxis
SQLRETURN SQL_API SQLBindParameter( SQLHSTMT StatementHandle, /* hstmt */ SQLUSMALLINT ParameterNumber, /* ipar */ SQLSMALLINT InputOutputType, /* fParamType */ SQLSMALLINT ValueType, /* fCType */ SQLSMALLINT ParameterType, /* fSqlType */ SQLUINTEGER ColumnSize, /* cbColDef */ SQLSMALLINT DecimalDigits, /* ibScale */ SQLPOINTER ParameterValuePtr,/* rgbValue */ SQLINTEGER BufferLength, /* cbValueMax */ SQLINTEGER *FAR StrLen_or_IndPtr);/* pcbValue */
Argumentos de la función
Tabla 34. Argumentos de SQLBindParameter
Tipo de datos | Argumento | Uso | Descripción |
---|---|---|---|
SQLHSTMT | StatementHandle | entrada | Descriptor de contexto de sentencia. |
SQLUSMALLINT | ParameterNumber | entrada | Número del marcador de parámetro, ordenado secuencialmente de izquierda a derecha y comenzando en 1. |
SQLSMALLINT | InputOutputType | entrada | El tipo de parámetro. El tipo soportado es:
|
SQLSMALLINT | ValueType | entrada | Tipo de datos C del parámetro. Se da soporte a los tipos
siguientes:
Si se especifica SQL_C_DEFAULT, los datos se transfieren desde su tipo de datos C por omisión al tipo indicado en ParameterType. |
SQLSMALLINT | ParameterType | entrada | Tipo de datos SQL del parámetro. Los tipos soportados son:
|
SQLUINTEGER | ColumnSize | entrada | Precisión del marcador de parámetro correspondiente.
|
SQLSMALLINT | DecimalDigits | entrada | Escala del correspondiente parámetro si ParameterType es SQL_DECIMAL. |
SQLPOINTER | ParameterValuePtr | entrada (diferido), salida (diferido), o ambos |
|
SQLINTEGER | BufferLength | entrada | Para datos binarios y de tipo de carácter, BufferLength especifica la longitud del almacenamiento intermedio ParameterValuePtr. Para datos que no sean binarios ni de tipo carácter, este argumento no se tiene en cuenta y se considera que el almacenamiento intermedio ParameterValuePtr tiene la longitud asociada al tipo de datos C. Para parámetros de salida, BufferLength se utiliza para determinar si se truncan los datos. |
SQLINTEGER * | StrLen_or_IndPtr | entrada (diferido), salida (diferido), o ambos |
|
Uso
Un marcador de parámetro se representa mediante un símbolo ? en una sentencia de SQL y sirve para indicar una posición en la sentencia donde se colocará un valor proporcionado por la aplicación cuando se ejecute la sentencia. Este valor se puede obtener a partir de una variable de aplicación. Se utiliza SQLBindParameter() para enlazar el área de almacenamiento de la aplicación con el marcador de parámetro.
La aplicación debe asociar una variable a cada marcador de parámetro de la sentencia de SQL antes de ejecutarse ésta. Para esta función, ParameterValuePtr y StrLen_or_IndPtr son argumentos diferidos. Las posiciones de almacenamiento deben ser válidas y contener valores de datos de entrada cuando se ejecute la sentencia. Esto significa que la llamada a SQLExecDirect() o a SQLExecute() se debe mantener en el mismo ámbito de procedimiento que las llamadas a SQLBindParameter(), o bien estas posiciones de almacenamiento se deben asignar dinámicamente o declarar de forma estática o global.
Se hace referencia a los marcadores de parámetros por un número (ColumnNumber) y están numerados secuencialmente de izquierda a derecha, comenzando en el 1.
Todos los parámetros enlazados por esta función permanecen en vigor hasta que se invoca una de las funciones siguientes:
Una vez ejecutada la sentencia de SQL y procesados los resultados, la aplicación puede volver a utilizar el descriptor de sentencia para ejecutar otra sentencia de SQL. Si las especificaciones para el marcador de parámetro son diferentes (número de parámetros, longitud o tipo), se debe invocar SQLFreeStmt() con SQL_RESET_PARAMS para restaurar o borrar los enlaces de parámetros.
El tipo de datos del almacenamiento intermedio C indicado por ValueType debe ser compatible con el tipo de datos SQL indicado por ParameterType, de lo contrario se produce un error.
Debido a que los datos contenidos en las variables referenciadas por ParameterValuePtr y StrLen_or_IndPtr no se verifican hasta que se ejecuta la sentencia, los errores de contenido o formato de los datos no se detectan ni notifican hasta que se llama a SQLExecute() o a SQLExecDirect().
Para esta función, ParameterValuePtr y StrLen_or_IndPtr son argumentos diferidos. Cuando InputOutputType está establecido en SQL_PARAM_INPUT, las posiciones de almacenamiento deben ser válidas y contener valores de datos de entrada cuando se ejecute la sentencia. Esto significa que la llamada a SQLExecDirect() o a SQLExecute() se debe mantener en el mismo ámbito de procedimiento que las llamadas a SQLBindParameter(), o bien estas posiciones de almacenamiento se deben asignar dinámicamente o declarar de forma estática o global.
DB2 Everyplace da soporte a SQL_PARAM_INPUT, SQL_PARAM_INPUT_OUTPUT y SQL_PARAM_OUTPUT. DB2 Everyplace no da soporte a SQLPutData(), por lo que no se debe colocar el valor del parámetro en el almacenamiento intermedio ParameterValuePtr.
Para datos C binarios y de tipo de carácter, el argumento BufferLength especifica la longitud del almacenamiento intermedio ParameterValuePtr. Para todos los demás tipos de datos C, el argumento BufferLength no se tiene en cuenta.
Códigos de retorno
Diagnósticos
Tabla 35. SQLSTATE de SQLBindParameter
SQLSTATE | Descripción | Explicación |
---|---|---|
07006 | Conversión no válida. | La conversión desde el valor de datos identificado por el argumento ValueType al tipo de datos identificado por el argumento ParameterType no es una conversión válida. (Por ejemplo, la conversión desde SQL_C_DATE a SQL_DOUBLE.) |
40003 08S01 | Error en el enlace de comunicaciones. | El enlace de comunicaciones entre la aplicación y la fuente de datos se interrumpió antes de finalizar la función. |
58004 | Error inesperado del sistema. | Error no recuperable del sistema. |
HY001 | Error de asignación de memoria. | DB2 CLI no puede asignar la memoria necesaria para ejecutar o finalizar la función. |
HY003 | Tipo de programa fuera de rango. | El valor especificado por el argumento ParameterNumber no es un tipo de datos válido ni SQL_C_DEFAULT. |
HY004 | Tipo de datos SQL fuera de rango. | El valor especificado para el argumento ParameterType no es un tipo válido de datos SQL. |
HY009 | Valor no válido de argumento. | El argumento ParameterValuePtr es un puntero nulo y el argumento StrLen_or_IndPtr es un puntero nulo e InputOutputType no es SQL_PARAM_OUTPUT. |
HY013 | Error inesperado de gestión de la memoria. | DB2 CLI no puede acceder a la memoria necesaria para ejecutar o finalizar la función. |
HY090 | Longitud no válida de la serie de caracteres o del almacenamiento intermedio. | El valor especificado para el argumento BufferLength era menor que 0. |
HY093 | Número de parámetros no válido. | El valor especificado para el argumento ValueType es menor que uno o mayor que el número máximo de parámetros soportado por el servidor. |
HY094 | Valor no válido de escala. | El valor especificado para ParameterType es SQL_DECIMAL o SQL_NUMERIC y el valor especificado para DecimalDigits es menor que 0 o mayor que el valor del argumento ParamDef (precisión). |
HY104 | Valor no válido de precisión. | El valor especificado para ParameterType es SQL_DECIMAL o SQL_NUMERIC y el valor especificado para ParamDef es menor que uno. |
HY105 | Tipo de parámetro no válido. | InputOutputType no es SQL_PARAM_INPUT. |
HYC00 | Controlador no apropiado. | CLI de DB2 o la fuente de datos no da soporte a la conversión
especificada por la combinación del valor especificado para el argumento
ValueType y el valor especificado para el argumento
ParameterType.
El valor especificado para el argumento ParameterType no está soportado por CLI de DB2 o por la fuente de datos. |
Consulta relacionada