Carácteres en Oracle

Estoy trabajando con una BD Oracle, y me encuentro con el siguiente problema:
He generado unos scripts de inserts donde hay valores para los campos que contienen carácteres como "ñ, à, á, è, é, í, ò, ó, ú, ç...". Al ejecutar los scripts con el SQLPlus, resulta que estos carácteres son substituidos por otros. En cambio, si des de la aplicación web (donde se accede a la BD y se administra), cambio estos valores por los correctos, por ejemplo si sale "espala" en lugar de "españa" y lo cambio, la actualización se hace correctamente. Es problema del SQLPlus, ¿tiene qué ver con la variable NLS_LANGUAGE?
El problema que me encuentro, es que el servidor donde esta la BD no lo puedo administrar yo mismo, y simplemente me han dicho que no se puede cambiar el NLS_LANGUAGE.
1

1 respuesta

Respuesta
1
... grandes soluciones.
Efectivamente, lo más normal es que no se cambie el Character_set del servidor, porque es una maniobra de las denominadas "Horrorosamente peligrosas", debido a que puede fallar absolutamente todo... podría fallar hasta la maquina del café... siempre y cuando lo cambiemos en tiempo de producción, es decir es un parámetro quese establece en el servidor cuando se instala la base de datos, y por lo general ya está estudiado cuál va a ser, para luego no tener que cambiarlo; este parámetro conlleva muchas cosas, que aunque parece que no tiene mucha relevancia, en realidad tiene toda, ya que si se modificase, podría suceder, y (ya te digo que tampoco existe la certeza matemática de que falle), que no funcione nada. Pero bueno, evidentemente existen formas por las cuales podemos adaptar nuestras necesidades a las del sistema y es modificando nuestras variables de acceso o entorno.
Si tienes un cliente de la familia windows, el tema puede ser sencillo, y simplemente tienes que probar cambiando el contenido de la variable NLS_LANGUAGE y CHARACTER_SET en el registro del sistema; por si no conoces la manera de entrar: Inicio, ejecutar: y escribes "regedit" y se abrirá un navegador de registro, pues bien debes ir hasta: HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/NLS_LANG. Si editas esa entrada, podrás cambiarla por la que más te interese; lo más normal es: AMERICAN_AMERICA. WE8ISO8859P15, pero también suele ser : SPANISH_SPAIN. WE9ISO8859P15, depende de la version de tu servidor y del cliente de Oracle. También tienes que tener en cuenta que tu cliente, es decir tu pc, interpreta los caracteres de coma y punto flotante tal y como está definido en "configuración regional" del panel de control.
Pues bien, guiándote por la norma de "ensayo/error" deberías, con un poco de paciencia llegar a una solución. En este caso te puedo dar una pequeña pista de como llegar hasta la solución, pero serás tu quien lo solucione por tu paciencia y perseverancia; este tipo de errores son un poco engorrosos, aunque a veces también pasa que lo encuentras a la primera y santas pascuas, pero no suele ser así.
Osea que nada a ver si hay suerte y modificando los parámetros poco a poco encuentras la manera de que se interprete bien lo que tu quieres hacer.
En otras ocasiones puede haber otro cliente que ataca la base de datos igual que tu, y a él le va bien... lo que indica que debemos copiar al milímetro la configuración de ese cliente para poder llegar al éxito.
Cuando te dispongas a cambiar los parámetros, sean cual sean, debes hacer uno a uno y por orden, es decir, si cambias el NLS_LANG del cliente no hagas otra modificación a la vez, que pueda llevar a confusión o despiste, ya que si cambias 2 cosas a la vez no sabrás cuál de los cambio ha tenido éxito y cual no. Siempre cambia primero una cosa, pruébalo, si no funciona, pues vuelves al punto de partida, y cambias otro y así sucesivamente.
Espero tengas suerte.!
Cuéntame que tal va... y en el peor de los casos, si no consigues cuadrar la configuración, dame la configuración de tu servidor, la de tu cliente a nivel de base de datos y de pc, y me tendré que liar yo aquí, emulando tu fallo, para dar con la solución, pero esperemos no llegar a eso. :)
Hola,
Primero de todo muchas gracias por contestar, te lo agradezco muchísimo.
Lo que pasa es que esto va a estar en una aplicación web que posiblemente tenga muchos clientes (no solamente windows), y claro, lo de cambiar la configuración del registro no me parece una solución viable.
Por otra parte, el problema, es que con la aplicación web que estoy desarrollando, si hago con un formulario un update o un insert, el tema de los caracteres funciona perfectament, acentos, ñ, ç, etc. El problema, es cuando se ejecutan los scripts de los inserts des del SQLPLus (Por lo que he averiguado yo), que los caracteres salen cambiados.
En mi máquina que hago las pruebas de la aplicación y tengo montado una BD idéntica no tengo estos problemas.
Pienso que una posible solución es cuando mande los inserts para que los ejecuten añadir al principio del insert, un ALTER SESSION ... NLS_LANGUAGE, por lo que sé esto sólo modificará el NLS_LANGUAGE en esta sesión del SQLPlus. ¿Tu qué crees? Muchas gracias por todo, y agradezco muchísimo tu dedicación y paciencia. Saludos!
Por lo que veo estás un poco vedado. No se puede variar la configuración del servidor, y por lo que me cuentas tampoco se puede hacer con los clientes... pues claro, una de las únicas soluciones que posiblemente existan es la que tu planteas. Con un ALTER SESSION efectivamente solo se modifica las variables a nivel de sesión y no de sistema ni nada parecido. En alguna ocasión yo también lo he tenido que usar, y suele ser un cambio que en ejecución no tiene coste alguno. La sentencia, por si no la tienes entera es:
ALTER SESSION SET NLS_LANGUAGE = AMERICAN , o lo que nos interese.
En lo único que tendrás que tener cuidado es si tu aplicativo realiza subconexiones a la base de datos, es decir, si hace algún reconnect sin herencia, o si realiza algún refresco de las conexiones; en esos casos podrías tener problemas en la convivencia de varias sessiones, etc...
En fin, me parece una gran solución. Bien pensado.
A ver si tienes suerte y todo va bien.
Hazme saber si todo funciona con la solución del ALTER SESSION, ¿ok?
Hola,
Perdona por no contestar antes, pero primero necesitaba ver si el tema funcionaba. La verdad, es que no ha funcionado, vaya, el problema es que los scripts no los ejecuto yo, y sólo puedo ver el resultado con la aplicación. O sea, yo no puedo hacer pruebas en la máquina de producción. De todas formas muchísimas gracias por el interés in la paciencia. Mucha suerte y hasta otra. Saludos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas