Puede aumentar la probabilidad de que Db2 pueda identificar sentencias de SQL coincidentes cuando utilice el mandato BIND QUERY para influir en la selección de vía de acceso.
Acerca de esta tarea
Db2 modifica el texto de la sentencia que se utiliza para la coincidencia durante BIND o PREPARE. Por ejemplo, el espacio en blanco, los comentarios
SQL y algunas cláusulas como EXPLAIN se eliminan del texto de la consulta. Estos cambios permiten que Db2 coincida con las sentencias SQL analizadas durante el proceso de BIND y PREPARE.
Los siguientes valores predeterminados
de la aplicación deben ser iguales en el momento de BIND QUERY
que cuando se enlazan sentencias SQL estático o cuando se preparan sentencias SQL
dinámico:
- CCSID
- DECIMAL POINT
- STRING DELIMITER
Procedimiento
Para permitir coincidencias correctas del texto de las sentencias,
utilice los siguientes métodos:
- Para sentencias de SQL estático, y para sentencias dinámicas que
se preparen con la opción DYNAMICRULES(BIND), especifique las columnas
siguientes, que especifican información de paquete para la sentencia en DSN_USERQUERY_TABLE:
- PACKAGE
- COLLECTION
- VERSIÓN
Estos valores no son estrictamente necesarios. Sin embargo, cuando se especifican estos valores, Db2 utiliza la información de análisis de la tabla de catálogo SYSIBM.SYSPACKSTMT para modificar el texto de la sentencia. Si los valores no se especifican o el paquete coincidente no se encuentra durante el proceso de BIND QUERY, Db2 utiliza los valores que se especifican en el módulo de valores predeterminados de la aplicación.
Como parte del proceso BIND QUERY, Db2 valida que el paquete, si se ha especificado, contiene texto de la sentencia coincidente. Si el texto de la sentencia no coincide, Db2 emite el mensaje DSNT281I y el mandato BIND QUERY no se ejecuta correctamente.
Si
existen varias versiones del paquete y se especifica * para el valor
de la columna VERSION. Db2 utiliza la información del paquete de la tabla del catálogo SYSIBM.SYSPACKSTMT que tiene el valor más pequeño en la columna VERSION para modificar el texto de la declaración. Si otras versiones
del paquete utilizan otras opciones, es posible que la coincidencia no
tenga éxito para sentencias de las otras versiones.
Cuando el contexto de paquete no se especifica en DSN_USERQUERY_TABLE, Db2 utiliza el módulo predeterminado de aplicaciones para modificar el texto de la sentencia. Sin embargo,
la a no se valida para sentencias de un paquete concreto.
- Cuando se llena la columna QUERY_TEXT en DSN_USERQUERY_TABLE,
seleccione el texto de la consulta de las ubicaciones siguientes:
- En el caso de sentencias de SQL estático, seleccione el texto de la sentencia del
DBRM o de la tabla de catálogo SYSIBM.SYSPACKSTMT.
- En el caso de sentencias de SQL dinámico, seleccione el texto de la sentencia de la
caché de sentencias dinámicas. Para las sentencias que son elegibles para la sustitución de valores literales por el símbolo ampersand (&), extraiga el texto de la sentencia después de que Db2 sustituya los valores literales.
Es posible especificar el texto de directamente en una sentencia INSERT
(por ejemplo, copiando del código fuente de la aplicación). Sin embargo,
ese método reduce la posibilidad de una coincidencia correcta de sentencias
para la sugerencia.
- Asegúrese de que los nombres de objeto y las palabras clave SQL del
texto de la sentencia se especifiquen con caracteres en mayúscula, especialmente
para sentencias de SQL dinámico.