
Incompatibilidades de release SQL y aplicaciones
Cuando migre o aplique el mantenimiento en Db2 12, tenga en cuenta y planifique las incompatibilidades de aplicaciones y SQL entre releases que puedan afectar al entorno de Db2.
Los siguientes cambios incompatibles se aplican a cualquier nivel de función de Db2 12 , incluso cuando migra por primera vez a Db2 12. Para cambios incompatibles que podrían afectar a su entorno de Db2 12 , cuando active los niveles de función 501 y superiores, consulte Resumen de cambios incompatibles para los niveles de función 501 y superiores.
- Prestaciones de SQL
- Las nuevas funciones de SQL están disponibles después de la activación del nivel de función que los introduce o un nivel superior, para las aplicaciones que se ejecutan en el nivel de compatibilidad de aplicación equivalente o superior. Las nuevas capacidades de SQL en la versión inicial de Db2 12 estarán disponibles en el nivel de función 500 para aplicaciones que se ejecuten en el nivel de compatibilidad de aplicaciones equivalente o superior. Puede seguir ejecutando instrucciones SQL compatibles con niveles de función inferiores o versiones anteriores de SQL ( Db2 ), incluidas Db2 11 y DB2® 10. Para más detalles, consulte los niveles de APPLCOMPAT en Db2 12
La función incorporada SUBSTR siempre devuelve un mensaje de error para una entrada no válida
Anteriormente, durante la ejecución de la función incorporada SUBSTR, Db2 a veces devolvía incorrectamente un resultado por entrada no válida en lugar de emitir un mensaje de error apropiado. Después de aplicar el PTF para APAR PH36071 y si se activa el nivel de función V12R1M500 o superior, el parámetro del subsistema SUBSTR_COMPATIBILITY se establece por defecto en PREVIOUS y Db2 sigue comportándose como antes de aplicar el PTF. Si el parámetro del subsistema SUBSTR_COMPATIBILITY está establecido a CURRENT, Db2 siempre aplica las reglas para la función incorporada SUBSTR que están documentadas en la función escalar SUBSTR.
SELECT SUBSTR('ABCD', 2+1, 3) FROM SYSIBM.SYSDUMMY1;Anteriormente, esta consulta ha devuelto incorrectamente el resultado 'CD '.Antes de establecer el parámetro de subsistema SUBSTR_COMPATIBILITY en CURRENT, es posible que tenga que modificar algunas de las aplicaciones para manejar este cambio.
Acciones a tomar
En Db2 12, antes de establecer el parámetro de subsistema SUBSTR_COMPATIBILITY en CURRENT, identifique las aplicaciones que son incompatibles con este cambio iniciando un rastreo para IFCID 0376 y, a continuación, ejecutando las aplicaciones. Revise la salida de rastreo para los cambios incompatibles con el identificador 14. Corrija las aplicaciones afectadas para que sean compatibles si el parámetro de subsistema SUBSTR_COMPATIBILITY se establece en CURRENT en el futuro.
Las sentencias CREATE TABLESPACE y CREATE INDEX sin ninguna cláusula USING de nivel de espacio fallan si el grupo de almacenamiento especificado cuando se ha creado la base de datos que lo contiene no existe
A partir de la versión 500 de Oracle® Database ( Db2 12 ), Db2 registra el grupo de almacenamiento predeterminado para el espacio de tabla o índice en el catálogo de bases de datos ( Db2 ). Sin embargo, Db2 tampoco valida la existencia de un grupo de almacenamiento especificado en la cláusula STOGROUP de una sentencia CREATE DATABASE. Como resultado, una sentencia CREATE TABLESPACE o CREATE INDEX que omite la cláusula USING en el nivel de espacio de tabla o índice ahora falla con SQLCODE -204, si el grupo de almacenamiento especificado cuando se ha creado la base de datos que lo contiene no existe.
Por ejemplo, supongamos que se creó una base de datos con la siguiente declaración y no existe ningún grupo de almacenamiento con el nombre NONESUCH.
CREATE DATABASE MYDB0 STOGROUP NONESUCH;
Si emite una instrucción CREATE TABLE SPACE como el ejemplo siguiente, o una instrucción CREATE INDEX similar, que no especifica un grupo de almacenamiento existente, falla con SQLCODE -204 porque el grupo de almacenamiento NONESUCH no existe.
CREATE TABLESPACE TSPACE0 IN MYDB0;
Es decir, el resultado es similar al siguiente:
DSNT408I SQLCODE = -204, ERROR: NONESUCH IS AN UNDEFINED NAME
DSNT418I SQLSTATE = 42704 SQLSTATE RETURN CODE
Acciones a tomar
- Especifique un grupo de almacenamiento existente en una cláusula USING STOGROUP de nivel de índice o de espacio de tabla (una cláusula USING de nivel de partición no es suficiente para evitar el error) en cualquier instrucción CREATE TABLESPACE o CREATE INDEX que cree un espacio de tabla o un índice en esa base de datos. Por ejemplo, la siguiente instrucción CREATE TABLESPACE tiene éxito si la emite en lugar del ejemplo anterior, suponiendo que existe el grupo de almacenamiento SYSDEFLT:
CREATE TABLESPACE TSPACE0 IN MYDB0 USING STOGROUP SYSDEFLT; - Emitir una instrucción ALTER DATABASE y especificar la cláusula STOGROUP que identifica un grupo de almacenamiento. Por ejemplo, puede emitir la siguiente declaración y, a continuación, volver a intentar las declaraciones CREATE TABLESPACE o CREATE INDEX.
ALTER DATABASE MYDB0 STOGROUP SYSDEFLT;
Nuevo número máximo de marcadores de parámetro o variables de host en una única sentencia SQL
Db2 12 impone el número máximo de marcadores de parámetro o variables de host en una sola sentencia SQL. A partir del nivel de función 100, Db2 12 emite SQLCODE -101 para cualquier sentencia SQL que contenga más de 16.000 marcadores de parámetro o variables de host.
Acciones a tomar
Identifique y modifique cualquier sentencia SQL existente que contenga más de 16.000 marcadores de parámetro o variables de host.

Cambio de resultado para la sentencia SQL EXPLAIN PACKAGE
Cuando Db2 procesa la instrucción SQL EXPLAIN PACKAGE, la columna HINT_USED en el PLAN_TABLE se rellena con EXPLAIN PACKAGE: copy. El campo copy de la columna HINT_USED será uno de los valores siguientes:
- "CURRENT": la copia actual
- "PREVIOUS": la copia anterior
- "ORIGINAL": la copia original
Este cambio es compatible con la nueva capacidad de reasignación gradual que se introduce en el nivel de función 505. Sin embargo, el cambio entra en vigor inmediatamente cuando migra a Db2 12.
Acciones a tomar
Cambie la salida esperada para las consultas que hacen referencia a esta columna.


Cambio de resultado para la sentencia SQL EXPLAIN STABILIZED DYNAMIC QUERY
Cuando Db2 procesa la instrucción SQL EXPLAIN STABILIZED DYNAMIC QUERY, la columna HINT_USED en el PLAN_TABLE se rellena con EXPLAIN PACKAGE: copy. El campo copy de la columna HINT_USED será uno de los valores siguientes:
- "CURRENT": la copia actual
- "INVALID": la copia no válida
Este cambio es compatible con la nueva capacidad de reasignación gradual que se introduce en el nivel de función 505. Sin embargo, el cambio entra en vigor inmediatamente cuando migra a Db2 12.
Acciones a tomar
Cambie la salida esperada para las consultas que hacen referencia a esta columna.


Cambios en la columna DSVOLSER de la tabla de catálogo SYSCOPY
Db2 12 introduce una nueva capacidad para eliminar solo copias de imágenes e FlashCopy es si existen copias de imágenes secuenciales equivalentes, para un procedimiento de copia de seguridad eficiente que utiliza un espacio mínimo en disco. Como soporte de esta prestación, los valores posibles para la columna DSVOLSER en la tabla de catálogo SYSIBM.SYSCOPY han cambiado. Anteriormente, el valor de la columna DSVOLSER era una serie vacía para copias de imagen completas catalogadas, secuenciales. Algunas aplicaciones pueden suponer que si el atributo de longitud del valor de DSVOLSER es cero, la copia de imagen está catalogada. En Db2 12, esa suposición ya no es correcta. Para las copias de imágenes completas, secuenciales y catalogadas que se crean a partir de una copia de imagen e FlashCopy e con coherencia, y que también tienen unidades de trabajo no comprometidas deshechas, la columna DSVOLSER ahora contiene información de punto de control de Db2 . 
Para obtener más información sobre esta nueva función, consulte Posibilidad de eliminar solo copias de imágenes e FlashCopy.
Acciones a tomar
Modifique las aplicaciones que utilizan la columna DSVOLSER en la tabla de catálogo SYSCOPY para tolerar la información de punto de comprobación para copias de imagen completas catalogadas y secuenciales. Para obtener detalles, consulte la descripción de DSVOLSER en la Tabla de catálogo SYSCOPY.


Los niveles de compatibilidad de aplicación se aplican a las sentencias de definición y control de datos
Después de la activación del nivel de función 500 o superior en Db2 12, los niveles de compatibilidad de la aplicación también controlan la sintaxis, la semántica, los valores predeterminados y la validación de opciones para la mayoría de las sentencias de definición de datos y de control de datos. Las sentencias de definición de datos (a veces abreviadas como DDL) incluyen varias sentencias CREATE y ALTER. Las sentencias de control de datos (a veces abreviadas como DCL) incluyen varias sentencias GRANT y REVOKE. Solo los niveles de compatibilidad de aplicaciones V12R1M509 y superiores controlan el comportamiento de cualquier declaración de definición de datos o de control de datos.
La opción de enlace APPLCOMPAT para un paquete se aplica a la mayoría de las sentencias de definición y control de datos de SQL estático. El registro especial CURRENT APPLICATION COMPATIBILITY se aplica a la mayoría de sentencias de definición de datos y control de datos de SQL dinámico.
Para la regeneración implícita de un objeto, se utiliza el nivel de compatibilidad de aplicación que estaba en vigor para la sentencia CREATE o ALTER anterior para ese objeto.
Para la materialización de los cambios de definición de datos pendientes, se utiliza el nivel de compatibilidad de aplicación de la sentencia ALTER pendiente.
Puede especificar la cláusula USING APPLICATION COMPATIBILITY de determinadas sentencias ALTER para volver a generar un objeto con un nivel de compatibilidad de aplicación específico.

Reenlace automático de planes y paquetes creados antes de DB2 10
Las vinculaciones automáticas relacionadas con la migración (también llamadas autobindings
) se producen en Db2 12 porque no puede utilizar estructuras de tiempo de ejecución de un plan o paquete que se vinculó por última vez en una versión anterior a DB2 10. Los planes y paquetes que se enlazaron en Db2 11 pueden ejecutarse en Db2 12, sin el riesgo de enlaces automáticos relacionados con la migración. Sin embargo, los planes y paquetes que están vinculados en Db2 12 no pueden ejecutarse en los miembros de Db2 11 sin un enlace automático en Db2 11.
Si especifica YES o COEXIST para el parámetro del subsistema ABIND, Db2 12 vuelve a vincular automáticamente los planes y paquetes que se vincularon antes de la versión 10 de DB2, cuando Db2 ejecuta los paquetes. El resultado del enlace automático crea un nuevo paquete y descarta la copia actual. Db2 no mueve la copia actual a la copia anterior u original porque Db2 12 no puede utilizarla. Si se produce una regresión, REBIND SWITCH PREVIOUS y REBIND SWITCH ORIGINAL no están disponibles.
Si especifica NO para el parámetro del subsistema ABIND, se devuelven códigos SQL negativos para cada intento de ejecutar un paquete o plan que se vinculó antes de DB2 10. Se devuelve SQLCODE -908, SQLSTATE 23510 para los paquetes, y SQLCODE -923, SQLSTATE 57015 para los planes hasta que se vuelvan a publicar en Db2 12.
Acciones a tomar
Al prepararse para la migración a Db2 12 en Db2 11, puede reducir el cambio y el riesgo de los paquetes que están sujetos a enlaces automáticos en Db2 12. Para ello, vuelva a vincular todos los paquetes que se vincularon por última vez antes de DB2 10 en Db2 11, antes de migrar a Db2 12. Para obtener más información sobre los impactos que las reasignaciones automáticas relacionadas con la migración pueden tener en su entorno de Db2 y las acciones que puede realizar para evitarlas, consulte Reasignar planes y paquetes antiguos en Db2 11 para evitar reasignaciones automáticas perjudiciales en Db2 12.
Soporte de opción de enlace KEEPNAMIC(YES) para ROLLBACK
En Db2 12, cuando el valor APPLCOMPAT es V12R1M500, la opción de enlace KEEPDYNAMIC(YES) afecta tanto a las sentencias COMMIT como a las ROLLBACK. Con KEEPDYNAMIC(YES), las sentencias de SQL dinámico del paquete se retienen después de COMMIT o ROLLBACK, y dichas sentencias se pueden volver a ejecutar sin otra PREPARE.
Antes de Db2 12, la opción de enlace KEEPDYNAMIC(YES) sólo se aplica a sentencias COMMIT. Después de una sentencia ROLLBACK, se necesitaba otra PREPARE para que se pudieran ejecutar las sentencias de SQL dinámico. Esta situación también es verdadera en Db2 12 si la compatibilidad de la aplicación se establece en V11R1 o anterior.
En Db2 12, cuando el valor APPLCOMPAT es V12R1M500 o superior, después de que se emita una instrucción ROLLBACK, el comportamiento es diferente al de las versiones anteriores:
- Una sentencia OPEN sin una sentencia PREPARE anterior no recibe un SQLCODE -514.
- Una sentencia EXECUTE sin una sentencia PREPARE anterior no recibe un SQLCODE -518.
Una aplicación que se ha escrito en Db2 11 y que estaba enlazada con KEEPNAMIC(YES) era necesaria para preparar de nuevo la sentencia de SQL dinámico después de que se haya emitido ROLLBACK. En Db2 12 , cuando la compatibilidad de la aplicación está configurada en V12R1M500 o superior, esas sentencias PREPARE adicionales son innecesarias.
Acciones a tomar
Al migrar a Db2 12, revise los paquetes que utilizan la opción de enlace KEEPDYNAMIC(YES). Puede hacer que los programas de SQL dinámico enlazados con KEEPNAMIC(YES) se ejecuten de forma más eficaz eliminando sentencias PREPARE que vuelven a preparar sentencias SQL, tras la ejecución de sentencias ROLLBACK. No realice esta acción hasta que esté seguro de que ya no necesita ejecutar los programas en Db2 11 o anteriores. Después de migrar a Db2 12, si realiza esta acción (para eliminar sentencias PREPARE después de ROLLBACK), los programas no funcionarán correctamente si posteriormente establece la compatibilidad de la aplicación en V11R1 o anterior.
Las alteraciones en la compresión de índices son cambios pendientes para los espacios de tablas universales
Cuando el nivel de compatibilidad de la aplicación es V12R1M500 o superior, la modificación para utilizar la compresión de índices en los espacios de tablas universales es un cambio pendiente que coloca el índice en estado de REORG-pending (AREOR) de aviso. Los programas de utilidad LOAD REPLACE y REBUILD INDEX ya no materializan el cambio. Debe utilizar un REORG en línea para materializar el nuevo valor del atributo COMPRESS en la sentencia ALTER INDEX.
En releases anteriores a Db2 12, cualquier alteración para utilizar la compresión de índice colocaba el índice en el estado pendiente de REBUILD (RBDP). Es necesario utilizar el programa de utilidad REBUILD INDEX para volver a crear el índice o utilizar el programa de utilidad REORG para reorganizar el espacio de tabla que corresponde al índice.
Acciones a tomar
Para índices en espacios de tabla universales, utilice una REORG en línea para materializar el nuevo valor para el atributo COMPRESS en la sentencia ALTER INDEX.
Tipos de datos de argumentos de salida de una llamada a un procedimiento almacenado en una aplicación Java
En el nivel de función 500 o superior con la compatibilidad de aplicaciones establecida en V11R1, cuando una aplicación Java™ que utiliza el IBM® Data Server Driver for JDBC and SQLJ llama a un procedimiento almacenado, los tipos de datos de los argumentos de salida del procedimiento almacenado coinciden con los tipos de datos de los parámetros en la definición del procedimiento almacenado.
Explicación
Antes de DB2 10, si un cliente Java llamaba a un procedimiento almacenado de Db2 for z/OS® , los tipos de datos de los argumentos de salida coincidían con los tipos de datos de los argumentos de la instrucción CALL correspondiente. A partir de la versión DB2 10, los tipos de datos de los argumentos de salida coinciden con los tipos de datos de los parámetros en la definición del procedimiento almacenado.
En Db2 12, cuando la compatibilidad de aplicaciones se establece en V10R1, puede establecer el parámetro de subsistema DDF_COMPATIBILITY en SP_PARMS_JV para mantener el comportamiento que existía antes de DB2 10. Sin embargo, cuando la compatibilidad de la aplicación se establece en V11R1 o V12R1M100, o en V12R1M500 o superior, SP_PARMS_JV ya no es compatible.
En Db2 12 con la compatibilidad de aplicaciones establecida en V11R1 o V12R1M100, o en V12R1M500 o superior, si la versión de IBM Data Server Driver for JDBC and SQLJ es inferior a 3.63 o 4.13, puede que se lance un java.lang.ClassCastException cuando se recupera un valor de argumento de salida.
Acciones a tomar
Efectúe una de las acciones siguientes:
- Actualice el IBM Data Server Driver for JDBC and SQLJ a la versión 3.63 o 4.13, o posterior.
- Modifique los tipos de datos en las llamadas de método CallableStatement.registerOutParameter para que coincidan con los tipos de datos de parámetros en las definiciones de procedimiento almacenado. Puede establecer la compatibilidad de aplicaciones en V10R1 y ejecutar un rastreo para el IFCID 0376 para identificar las aplicaciones afectadas. Los registros de rastreo para esas aplicaciones tienen un valor de campo QW0376FN de 8.

Sentencias SELECT INTO con UNION o UNION ALL
Una UNION o UNION ALL no está permitida en la cláusula from más externa de una sentencia SELECT INTO. Sin embargo, los releases anteriores a Db2 12 toleran inadvertidamente las sentencias SQL que contienen esta sintaxis no válida.
El comportamiento está controlado por el parámetro de subsistema DISALLOW_SEL_INTO_UNION. En Db2 11, la configuración predeterminada tolera la sintaxis no válida. En Db2 12 , la configuración predeterminada no permite la sintaxis no válida.
Una aplicación que utiliza la sintaxis SQL no válida falla en BIND o REBIND con SQLCODE -109.
Acciones a tomar
Identifique los paquetes que utilicen UNION o UNION ALL en la cláusula from de una sentencia SELECT INTO y corríjalos según sea necesario. Puede especificar temporalmente que Db2 continúe tolerando la sintaxis no válida NO para el parámetro de subsistema DISALLOW_SEL_INTO_UNION. Sin embargo, este parámetro de subsistema está en desuso y se espera que se elimine en el futuro.
Puede identificar los paquetes afectados mientras DISALLOW_SEL_INTO_UNION está establecido en NO mediante el enlace de paquetes sospechosos en un ID de colección ficticia con EXPLAIN (ONLY) y supervisando los registros de IFCID 0376. Los registros de rastreo para las aplicaciones afectadas tienen un valor de campo QW0376FN de 11.
Utilice el procedimiento siguiente:
- Emita la siguiente sentencia SQL para generar una lista de mandatos BIND.

SELECT 'BIND PACKAGE(DUMMYCOL) COPY(' || COLLID || '.' || NAME || ') ' || CASE WHEN(VERSION <> '') THEN 'COPYVER(' || VERSION || ') ' ELSE '' END || 'EXPLAIN(ONLY)' FROM SYSIBM.SYSPACKSTMT WHERE STATEMENT LIKE '%SELECT%INTO%UNION%' OR STATEMENT LIKE '%SELECT%UNION%INTO%';
La sentencia genera una salida similar al submandato BIND siguiente:
BIND PACKAGE(DUMMYCOL) COPY(DSN_DEFAULT_COLLID_PLAY01.PLAY01) EXPLAIN(ONLY) - Copie los resultados de la sentencia SELECT en un trabajo de enlace. Si los submandatos BIND tienen más de 72 bytes, es necesario dar formato.
- Inicie y recopile un rastreo para el IFCID 0376.
- Ejecute el trabajo de enlace que ha creado.
- Detenga el rastreo de IFCID 0376 y analice la salida.

Cambio en SQLCODE cuando el resultado de la función incorporada POWER está fuera de rango
Después de la activación del nivel de función 500 o superior en Db2 12, el SQLCODE que se devuelve cuando el resultado de la función incorporada POWER® está fuera de rango se cambia en algunos casos.
Por ejemplo, la consulta siguiente devuelve SQLCODE +802:
SELECT POWER(DOUBLE(2.0E38), DOUBLE(2.0))
FROM SYSIBM.SYSDUMMY1; Las invocaciones de la función POWER que tienen argumentos DOBLE y devuelven resultados fuera de rango devuelven SQLCODE +802 en lugar de SQLCODE -802.
Acciones a tomar
En Db2 12, antes de activar el nivel de función 500 o superior, identifique las aplicaciones con esta incompatibilidad iniciando un seguimiento para IFCID 0376 y, a continuación, ejecutando las aplicaciones. Revise la salida de rastreo para los cambios incompatibles con el identificador 1201. Ajuste el proceso de errores para tener en cuenta el cambio en el SQLCODE devuelto de error a aviso.
Funciones CHAR9 y VARCHAR9 para la compatibilidad con el formato de serie anterior a DB2 10 de datos decimales
DB2 10 ha cambiado el formato de datos decimales por las funciones incorporadas CHAR y VARCHAR y las especificaciones CAST con un tipo de resultado CHAR o VARCHAR. En Db2 12 puede utilizar funciones alternativas para la compatibilidad con aplicaciones que requieren una salida de serie decimal en los formatos anteriores a DB2 10:
Acciones a tomar
Revise el valor del parámetro de subsistema BIF_COMPATIBILITY. Si el valor no es CURRENT y tiene aplicaciones que requieren una salida de serie decimal en el formato anterior aDB2 10, puede reescribir sentencias de SQL para utilizar las funciones CHAR9 y VARCHAR9 en su lugar. Este enfoque permite el desarrollo de nuevas aplicaciones que pueden aceptar el formato de serie actual de datos decimales.
Para modificar las aplicaciones para aprovechar las funciones CHAR9, VARCHAR9:
- Utilice un rastreo IFCID 0376 para identificar aplicaciones que dependen de los formatos anteriores a DB2 10.
- Vuelva a escribir las sentencias SQL en las aplicaciones identificadas para utilizar las funciones CHAR9 y VARCHAR9 en lugar de las funciones CHAR y VARCHAR.
- Establezca el valor de BIF_COMPATIBILITY en CURRENT.
Parámetro de subsistema BIF_COMPATIBILITY y esquemas SQL para la compatibilidad con el formato de serie anterior a DB2 10 de datos decimales
DB2 10 ha cambiado el formato de datos decimales por las funciones incorporadas CHAR y VARCHAR y las especificaciones CAST con un tipo de resultado CHAR o VARCHAR. Puede alterar temporalmente estos cambios en un nivel de subsistema estableciendo el parámetro de subsistema BIF_COMPATIBILITY en uno de los valores anteriores a DB2 10. También puede alterar temporalmente estos cambios en un nivel de aplicación añadiendo el esquema SYSCOMPAT_V9 a la parte frontal de la opción de enlace PATH o el registro especial CURRENT PATH. Este último enfoque funciona para las funciones CHAR y VARCHAR y no afecta a las especificaciones CAST.
El enfoque recomendado es modificar las aplicaciones para manejar el DB2 10 y el comportamiento posterior para estas funciones, tal como se describe en los pasos siguientes.
Acciones a tomar
Para modificar las aplicaciones para manejar el DB2 10 y el comportamiento posterior para CHAR, VARCHAR y CAST:
- Identifique las aplicaciones que deben modificarse para manejar este cambio. Ejecute un rastreo para el IFCID 0376 para identificar las aplicaciones afectadas.
- Asegúrese de que el parámetro de subsistema BIF_COMPATIBILITY está establecido en V9_DECIMAL_VARCHAR.
Para manejar el cambio sólo para la función CHAR, puede establecer BIF_COMPATIBILITY en V9 y completar los pasos siguientes para la función CHAR.
- Cambie las aplicaciones afectadas para manejar el DB2 10 y el comportamiento posterior de CHAR y VARCHAR, incluidos los procedimientos almacenados, las funciones definidas por el usuario no incorporadas y los paquetes desencadenantes. Vuelva a escribir las especificaciones CAST afectadas con la función CHAR o VARCHAR adecuada y una CAST en la longitud correcta, si es necesario.
- Vuelva a enlazar y prepare los paquetes con la opción de reenlace PATH(SYSCURRENT, SYSIBM). La colocación del esquema SYSCURRENT al principio de la vía de acceso de SQL hace que se utilice el DB2 10 y el comportamiento posterior para las funciones incorporadas CHAR y VARCHAR.
Repita este paso para los procedimientos almacenados nativos (SQLPL) y las funciones escalares de SQL no en línea.
- Para las vistas que hacen referencia a estas conversiones o funciones incorporadas, determine si es necesario cambiar la vista para que tenga la salida esperada. Descarte y vuelva a crear las vistas con la opción de reenlace PATH(SYSCURRENT, SYSIBM), sólo si es necesario. Vuelva a enlazar cualquier aplicación que haga referencia a las vistas con la opción PATH(SYSCURRENT, SYSIBM) para utilizar DB2 10 y las funciones incorporadas posteriores CHAR y VARCHAR. Repita este paso para las funciones escalares de SQL en línea.
- Para tablas de consulta materializadas o índices en expresiones que hacen referencia a estas conversiones o funciones incorporadas, descarte y vuelva a crear las tablas de consulta materializada o los índices en expresiones con la opción de reenlace PATH(SYSCURRENT, SYSIBM). Emita la sentencia REFRESH TABLE para las tablas de consulta materializada. Vuelva a enlazar las aplicaciones que hagan referencia a las tablas de consulta materializada o los índices en expresiones con la opción PATH(SYSCURRENT, SYSIBM) para utilizar DB2 10 y las funciones incorporadas posteriores CHAR y VARCHAR.
- Cambie el valor del parámetro de subsistema BIF_COMPATIBILITY a CURRENT. Cuando el valor del parámetro de subsistema es CURRENT, las nuevas aplicaciones, los reenlaces y las sentencias CREATE utilizan DB2 10 y el comportamiento posterior CHAR, VARCHAR y CAST.
Las tablas de consulta materializada y los índices basados en expresiones utilizan el comportamiento de CHAR, VARCHAR y CAST que se especifica durante su creación. Si una sentencia de referencia tiene un comportamiento diferente especificado por el parámetro BIF_COMPATIBILITY o una ruta diferente, no se utiliza la tabla de consulta materializada o el índice basado en expresiones.

La entrada de serie combinada EBCDIC para las funciones incorporadas RTRIM, TRIM, LTRIM y STRIP debe ser válida
A partir del nivel de compatibilidad de aplicaciones V12R1M500 o superior, Db2 12 aplica más comprobaciones de validación para la entrada de cadenas mixtas EBCDIC a las funciones integradas RTRIM, TRIM, LTRIM y STRIP.
Por lo general, Db2 ha requerido datos de cadena mixta EBCDIC válidos para la entrada en estas funciones desde la versión 10, pero Db2 12 ahora detecta más casos que las versiones anteriores.
Con la nueva comprobación de validación, cuando Db2 12 realiza una operación de recorte y el argumento de expresión de cadena de la función incorporada RTRIM, TRIM, LTRIM o STRIP contiene datos mixtos EBCDIC no válidos, Db2 emite SQLCODE -171.
Acciones a tomar
Comprueba si los datos mixtos EBCDIC especificados para el argumento de expresión de cadena de una función incorporada RTRIM, TRIM, LTRIM o STRIP son válidos y resuelve los datos no válidos.
En datos mixtos válidos, las partes de doble byte de las series de entrada empiezan por X'0E' (carácter de desplazamiento desde teclado estándar), finalizan con X'0F' (carácter de desplazamiento a teclado estándar) y tienen un número par de bytes entre los caracteres X'0E' y X'0F'. Los datos que no cumplen estos criterios son datos mixtos no válidos. Cuando se especifican datos mixtos no válidos para el argumento expresión-serie de una función incorporada RTRIM, TRIM, LTRIM o STRIP, se devuelve SQLCODE -171 en algunos casos. Si Db2 recorta los caracteres especificados antes de que llegue a una parte no válida de una cadena mixta, la operación de recorte se realiza correctamente.
Establecer una compatibilidad de aplicación de V12R1M100 o inferior (si se aplica PTF para APAR PH25783 ) podría evitar el error mientras resuelve los datos no válidos. En los niveles inferiores de compatibilidad de la aplicación, Db2 12 intenta tolerar los datos mixtos no válidos identificados por la nueva comprobación de validación, y permite que la operación de recorte se complete si es posible. Sin embargo, si Db2 sigue sin poder realizar la operación de recorte, se emite SQLCODE -171.


El número máximo de funciones escalares externas definidas por el usuario que se ejecutan en un hilo de ejecución de aplicaciones ( Db2 ) ya no es ilimitado (APAR PH44833 )
A partir del nivel de compatibilidad de aplicaciones V12R1M100 (si se aplica el PTF para APAR PH44833 ), Db2 12 introduce el parámetro del subsistema MAX_UDF. MAX_UDF controla el número máximo de funciones escalares externas definidas por el usuario que pueden ejecutarse simultáneamente en un hilo de ejecución ( Db2 ). El valor máximo de MAX_UDF es 99999. Antes de la introducción de MAX_UDF, el número máximo de funciones escalares externas definidas por el usuario que podían ejecutarse simultáneamente en un hilo de ejecución ( Db2 ) era ilimitado.
Acciones a tomar
Si una aplicación contiene sentencias SQL que invocan funciones escalares externas definidas por el usuario, y una de esas sentencias SQL es rechazada con SQLCODE -904 y código de razón 00E70082, aumente el valor del parámetro del subsistema MAX_UDF o cambie la aplicación para que ejecute menos funciones simultáneamente en un hilo de ejecución ( Db2 ).

Palabras reservadas de SQL
Db2 12 introduce varias palabras reservadas SQL nuevas, que se enumeran en Palabras reservadas en Db2 for z/OS.
En algunos casos, el uso de estas palabras reservadas podría causar una incompatibilidad antes de que se active la nueva función en Db2 12 , independientemente de la configuración del indicador APPLCOMPAT. 
Acciones a tomar
Compruebe si sus aplicaciones utilizan las siguientes palabras reservadas de SQL:
Ajuste las aplicaciones que utilicen estas palabras cambiando la palabra reservada por un identificador delimitado o utilizando una palabra que no esté reservada en Db2 12. Para ver la lista completa, consulte Palabras reservadas en Db2 for z/OS.
Funciones incorporadas y funciones definidas por el usuario existentes
Para funciones incorporadas y definidas por el usuario, la combinación del nombre de función y la lista de parámetros forman la firma que Db2 utiliza para identificar la función. Si las firmas de las funciones integradas nuevas o modificadas en Db2 12 coinciden con las firmas de las funciones definidas por el usuario existentes, las aplicaciones con referencias no cualificadas a las funciones definidas por el usuario existentes podrían empezar a invocar las funciones integradas nuevas o modificadas en lugar de las funciones definidas por el usuario. Db2 12 presenta los siguientes cambios en las funciones integradas:
Db2 12 presenta o cambia las siguientes funciones incorporadas.
| Nivel de APPLCOMPAT | Nombre de función | Modificación introducida | ¿Cambio incompatible? |
|---|---|---|---|
| V12R1M507 | Varias | Las funciones siguientes están soportadas recientemente en Db2 for z/OS como expresiones de sólo paso a través, que se pasan a IBM Db2 Analytics Accelerator for z/OS. | Nee |
| V12R1M506 | Función escalar HASH | Nueva función incorporada. | Nee |
| V12R1M506 | Función escalar CHARACTER_LENGTH o CHAR_LENGTH | CHAR_LENGTH ahora está soportado como un nombre de función alternativo. | Nee |
| V12R1M506 | Función escalar CLOB o TO_CLOB | Ahora se da soporte a TO_CLOB como nombre de función alternativo. | Nee |
| V12R1M506 | Función agregada COVAR_POP o COVARIANZA o COVAR | Ahora se da soporte a COVAR_POP como un nombre de función alternativo. | Nee |
| V12R1M506 | Función escalar IZQUIERDA o STRLEFT | STRLEFT ahora está soportado como un nombre de función alternativo. | Nee |
| V12R1M506 | Función escalar POWER o POW | Ahora se da soporte a POW como un nombre de función alternativo. | Nee |
| V12R1M506 | Función escalar POSSTR o STRPOS | Ahora se da soporte a STRPOS como un nombre de función alternativo. | Nee |
| V12R1M506 | Función escalar RANDOM o RAND | Ahora se da soporte a RANDOM como nombre de función alternativo. | Nee |
| V12R1M506 | Función escalar DERECHA o DERECHA | Ahora se da soporte a STRRIGHT como un nombre de función alternativo. | Nee |
| V12R1M506 | Función escalar TIMESTAMP_FORMAT o TO_TIMESTAMP | Ahora se da soporte a TO_TIMESTAMP como nombre de función alternativo. | Nee |
| V12R1M505 | DECRYPT_DATAKEY_INTEGER, DECRYPT_DATAKEY_BIGINT, DECRYPT_DATAKEY_DECIMAL, DECRYPT_DATAKEY_VARCHAR, DECRYPT_DATAKEY_CLOB, DECRYPT_DATAKEY_VARGRAPHIC, DECRYPT_DATAKEY_DBCLOB y DECRYPT_DATAKEY_BIT | Nuevas funciones incorporadas. | Nee |
| V12R1M505 | ENCRYPT_DATAKEY | Nueva función incorporada. | Nee |
| V12R1M504 | Varias | Las funciones siguientes están soportadas recientemente en Db2 for z/OS como expresiones de sólo paso a través, que se pasan a IBM Db2 Analytics Accelerator for z/OS. | Nee |
| V12R1M502 | GRÁFICO función escalar | El primer argumento ahora acepta tipos de datos numéricos, incluidos SMALLINT, INTEGER, BIGINT, DECIMAL, REAL, DOUBLE, FLOAT y DECFLOAT. | Nee |
| V12R1M502 | función escalar VARGRAPHIC | El primer argumento acepta tipos de datos numéricos, incluidos SMALLINT, INTEGER, BIGINT, DECIMAL, REAL, DOUBLE, FLOAT y DECFLOAT. | Nee |
| V12R1M501 | función agregada LISTAGG | Nueva función incorporada. | Nee |
| V12R1M500 | Función agregada ARRAY_AGG | Función incorporada recién soportada cuando se utiliza para la agregación de matrices asociativas. | Nee |
| V12R1M500 | GENERAR_BINARIO_ÚNICO | Nueva función incorporada. | Nee |
| V12R1M500 | HASH_CRC32, HASH_MD5, HASH_SHA1 y HASH_SHA256 | Nuevas funciones incorporadas. | Nee |
| V12R1M500 | LOWER, función escalar | Ahora se pueden especificar las siguientes configuraciones regionales:
|
|
| V12R1M500 | PERCENTILE_CONT | Nueva función incorporada. | Nee |
| V12R1M500 | PERCENTILE_DISC | Nueva función incorporada. | Nee |
| V12R1M500 | Función escalar TRANSLATE | Ahora se pueden especificar las siguientes configuraciones regionales:
|
Nee |
| V12R1M500 | UPPER, función escalar | Ahora se pueden especificar las siguientes configuraciones regionales:
|
Nee |
| V12R1M500 | Función escalar WRAP | Nueva función incorporada. | Nee |
| V12R1M100 | Función de tabla BLOCKING_THREADS | Nueva función incorporada. |
Acciones a tomar
Para continuar ejecutando una función definida por el usuario con el mismo nombre o firma que una nueva función o firma incorporada, califique el nombre de la función definida por el usuario existente en la aplicación. Para obtener más información sobre cómo Db2 resuelve referencias calificadas y no calificadas a funciones, consulte Resolución de funciones.
Cambios de SQLCODE
Es posible que algunos números SQLCODE y texto de mensaje hayan cambiado en Db2 12. Además, las condiciones bajo las que se emiten algunos SQLCODE pueden haber cambiado. Para más información, consulte Códigos nuevos, modificados y eliminados.
