Quería saber si hay alguna forma de cargar caracteres especiales como ç o ã con sqlldr.
1 respuesta
Respuesta de dperdomo
1
1
dperdomo, Oracle, Developer, Redes, Lenguajes de programación diversos
Pues hasta donde he probado no da ningún problema la carga de caracteres especiales, acabo de hacer la prueba y cree un archivo "datos.txt" justamente con los caracteres que expones, cree el archivo ctl así: LOAD DATA INFILE 'C:\datos.TXT' append INTO TABLE prueba ( CAMPO1 POSITION(1:1) ) Y ejecute el sqlldr, luego revise la tabla y no hubo ningún problema con la carga de caracteres especiales. Espero te sirva. Éxitos.
Ah, es que me olvidé de decirte que es con Linux. Con DOS funciona bien. Saludos
No debería afectarle el SO, pero a veces en UNIX se pone algo "exquisito" y es de definir algo más, por lo general el character set, eso lo puedes hacer en el mismo archivo ctl, de la siguiente forma: LOAD DATA CHARACTERSET WE8ISO8859P1 INFILE '/u01/datos' append INTO TABLE prueba ( CAMPO1 POSITION(1:1) ) POr lo general con ese juego de caracteres no da problemas, aunque dependerá de la configuración que tenga tu base de datos, revisa eso antes. Espero te sirva. Éxitos.
Muchas gracias por responderme rápido. Lo que hicimos en un momento fue setear NLS_LANG="BRAZILIAN PORTUGUESE_BRAZIL.WE8ISO8859P15" y funciona bien. Pero me parece mejor hacerlo en el CTL como me recomendás vos, porque algunas veces me olvidaba de hacer el seteo desde PuTTy. Bueno, probé como me dijiste, pero el problema lo tengo cuando por ejemplo tengo un campo de 60 bytes e intento insertar 60 caracteres, me da error como que estoy intentando insertar 61 porque el carácter ã ocupa 2 lugares. Lo que hicimos fue definir el CTL así: COMMENTS POSITION(201:254) CHAR(54), XX_OPERATION_CD POSITION(263:292) CHAR(30), Es decir, dejar 4 espacios para posibles tildes. Pero trunca el valor del campo. Por eso te consultaba, por si me recomendabas alguna otra solución. Saludos
Eso si esta raro. El campo de la tabla es CHAR? Lo otro que pudieras probar es generar el archivo de datos delimitado por algún carácter, coma (,) por ejemplo y definirlo así en en archivo .ctl; yo he realizado pruebas como en el ejemplo que te envío y no me da ningún problema, lo otro es que definitivamente exista alguna diferencia entre la configuración de caracteres en la base y este realizando alguna conversión, revisa la tabla V$NLS_PARAMETERS para validar los valores de tu base y trata de ocupar lo mismo en el sqlldr. Éxitos.
Hola, muchas gracias por tus comentarios. El problema es que yo no genero los archivos de entrada y tampoco soy la DBA :o( Estoy en el medio, pero de todas maneras muchas gracias, por tu intención de ayudarme. Saludos desde Argentina!