2011-02-09 66 views
7

Tengo una tabla externa que lee desde un archivo de longitud fija. Se espera que el archivo contenga caracteres especiales. En mi caso, la palabra que contiene el carácter especial es "Göteborg". Como "ö" es un carácter especial, parece que Oracle lo está considerando como 2 bytes. Eso causa el problema. Los campos subsiguientes de los archivos se desplazan 1 byte, lo que arruina los datos. Alguien ha enfrentado el problema antes. Hasta ahora hemos tratado la solución siguiente:Manejo de caracteres UTF-8 en tablas externas de Oracle

Se ha cambiado el valor de NLS_LANG American_America.WE8ISO8859P1
intentado fijar la Base de Datos de Carácter establece en UTF-8
intentado cambiar el NLS_LENGTH_SYMMANTIC en CHAR en lugar de bytes mediante alteraciones en el sistema
Intentó cambiar el conjunto de caracteres de la tabla externa por: AL32UTF8
Se intentó cambiar el conjunto de caracteres de la tabla externa a: UTF-8

Nada funciona. Otros detalles incluyen:

  • archivo es UTF-8 codificado
  • Sistema Operativo: RHEL
  • Base de datos: Oracle 11g

cualquier otra cosa que puede ser que falte? Cualquier ayuda será apreciada. ¡Gracias!

Respuesta

8

nls_length_semantics solo se refiere a la creación de tablas nuevas.

A continuación se muestra lo que hice para solucionar este problema.

records delimited by newline 
    CHARACTERSET AL32UTF8 
    STRING SIZES ARE IN CHARACTERS 

decir

ALTER SESSION SET nls_length_semantics = CHAR 
/
CREATE TABLE TDW_OWNER.SDP_TST_EXT 
(
    COST_CENTER_CODE VARCHAR2(10)  NULL, 
    COST_CENTER_DESC VARCHAR2(40)  NULL, 
    SOURCE_CLIENT VARCHAR2(3)  NULL, 
    NAME1   VARCHAR2(35)  NULL 
) 
ORGANIZATION EXTERNAL 
(TYPE ORACLE_LOADER 
    DEFAULT DIRECTORY DBA_DATA_DIR 
    ACCESS PARAMETERS 
    (records delimited by newline 
     CHARACTERSET AL32UTF8 
     STRING SIZES ARE IN CHARACTERS 
     logfile DBA_DATA_DIR:'sdp_tst_ext_%p.log' 
     badfile DBA_DATA_DIR:'sdp_tst_ext_%p.bad' 
     discardfile DBA_DATA_DIR:'sdp_tst_ext_%p.dsc' 
     fields 
    notrim 
     (
      COST_CENTER_CODE CHAR(10) 
      ,COST_CENTER_DESC CHAR(40) 
      ,SOURCE_CLIENT CHAR(3) 
      ,NAME1 CHAR(35) 
      ) 
    ) 
    LOCATION (DBA_DATA_DIR:'sdp_tst.dat') 
) 
REJECT LIMIT UNLIMITED 
NOPARALLEL 
NOROWDEPENDENCIES 
/
+0

Gracias! Resolvió mi problema aquí. –

Cuestiones relacionadas