Caracteres variant
Los caracteres variables son caracteres que corresponden a distintos elementos de código de un conjunto determinado de páginas de códigos. Por ejemplo, el carácter # es variable. Corresponde al elemento de código X'7B' en los CCSID 37, 273, 500 y 1047. Sin embargo, este carácter corresponde al elemento de código X'4A' en el CCSID 277.
Un carácter no variable es un carácter que corresponde al mismo elemento de código, independientemente del CCSID.
Lo ideal es utilizar caracteres no variables siempre que sea posible. Sin embargo, si utiliza caracteres variables, asegúrese de que Db2 utilice el CCSID correcto para interpretarlos.
Por ejemplo, tenga en cuenta los siguientes caracteres nacionales: #, @ y $. Aunque puede utilizar estos caracteres en identificadores de objeto, debe tener en cuenta que todos son caracteres variables. En la tabla siguiente se muestran los correspondientes valores de elemento de código hexadecimal de esos caracteres en varias páginas de códigos distintas.
| Carácter | Valor hexadecimal correspondiente por página de códigos | ||||
|---|---|---|---|---|---|
| CCSID 37 | CCSID 500 | CCSID 1047 | CCSID 277 | CCSID 273 | |
| # | X'7B' | X'7B' | X'7B' | X'4A' | X'7B' |
| @ | X'7C' | X'7C' | X'7C' | X'80' | X'B5' |
| $ | X'5B' | X'5B' | X'5B' | X'67' | X'5B' |
Debe utilizar esos caracteres con especial atención en los identificadores, como pueden ser nombres de paquete, nombres de espacios de tablas, nombres de espacios de índice y nombres de procedimiento de campo. Todos estos objetos tienen conjuntos de datos, DBRM o módulos de carga correspondientes que se definen en z/OS® con nombres correspondientes. Se pueden producir problemas si se utiliza un CCSID cuando se crea el objeto distinto del que se utiliza cuando se hace referencia al objeto. En este caso, es posible que los conjuntos de datos, DBRM o módulos de carga correspondientes no se encuentren en z/OS debido a las variantes de los caracteres en los nombres.
Otro ejemplo de un carácter variable que puede dar problemas es el signo de comillas dobles ("). En la página de códigos turca CCSID 1026, este carácter corresponde al punto de código X'FC'. No obstante, este elemento de código no es el mismo en otras páginas de códigos EBCDIC.
Evite también utilizar caracteres variables en las sentencias de SQL. Por ejemplo, suponga que desea utilizar un operador que signifique "no es igual". La cod ificación <> es la mejor opción, porque estos caracteres son invariables en la mayoría de los CCSID EBCDIC. Sin embargo, dependiendo de la situación, Db2 podría tolerar otros operadores para "no iguales" como!= o ¬=. Para obtener detalles sobre las condiciones que deben cumplirse para que Db2 tolere esos operadores, consulte Predicado básico. Incluso si se cumplen estas condiciones, el signo de exclamación (!) y el signo de notación (¬) son variables y, por lo tanto, pueden causar otros problemas. Por ejemplo, puede que esos caracteres no se visualicen correctamente en un cliente. Además, es posible que se produzcan problemas de conversión si la sentencia SQL se copia del catálogo o la lee otro sistema.
Para evitar tales problemas con los caracteres variables, utilice las recomendaciones siguientes.
- Utilice caracteres no variables en los identificadores y las sentencias de SQL.
- Cuando nombre objetos de Db2, utilice solo los caracteres que pueda escribir en el teclado. No utilice valores hexadecimales en los nombres de objeto. Si lo hace, puede complicar de forma innecesaria las aplicaciones y las consultas.
- Utilice CONCAT en lugar de || cuando tenga que concatenar valores.
- Utilice <> para indicar «no igual» en lugar de!= o ¬=.
- No utilice elementos de código hexadecimales variables de otra página de códigos. Si lo hace, puede provocar errores de conversión.