2011-02-09 8 views
7

Ho una tabella esterna che legge da un file di lunghezza fissa. Il file dovrebbe contenere caratteri speciali. Nel mio caso la parola che contiene caratteri speciali è "Göteborg". Poiché "ö" è un personaggio speciale, sembra che Oracle lo stia considerando come 2 byte. Questo causa il problema. I successivi campi nei file vengono spostati di 1 byte, facendo confusione con i dati. Qualcuno ha affrontato il problema prima. Finora abbiamo provato la seguente soluzione:Gestione di caratteri UTF-8 nelle tabelle esterne Oracle

cambiato il valore di NLS_LANG per AMERICAN_AMERICA.WE8ISO8859P1
provato a fissare la caratteri del database impostato su UTF-8
provato a cambiare il NLS_LENGTH_SYMMANTIC a char invece di byte utilizzando ALTER SYSTEM
Provato a cambiare il set di caratteri della tabella esterna su: AL32UTF8
Provato a cambiare il set di caratteri della tabella esterna su: UTF-8

Niente funziona. Altri dettagli includono:

  • File è codifica UTF-8
  • Sistema operativo: RHEL
  • database: Oracle 11g

Qualsiasi altra cosa che mi potrebbe essere mancante? Qualsiasi aiuto sarà apprezzato. Grazie!

risposta

8

I nls_length_semantics riguardano solo la creazione di nuove tabelle.

Di seguito è quello che ho fatto per risolvere questo problema.

records delimited by newline 
    CHARACTERSET AL32UTF8 
    STRING SIZES ARE IN CHARACTERS 

cioè

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

Grazie! Risolto il mio problema qui. –

Problemi correlati