2011-02-09 11 views
7

Mam zewnętrzną tabelę, która czyta z pliku o stałej długości. Plik powinien zawierać znaki specjalne. W moim przypadku słowo zawierające znak specjalny to "Göteborg". Ponieważ "ö" jest znakiem specjalnym, wygląda na to, że Oracle bierze go pod uwagę jako 2 bajty. To powoduje kłopoty. Kolejne pola w plikach zostaną przesunięte o 1 bajt, co spowoduje zepsucie danych. Czy ktoś wcześniej zmierzył się z problemem. Do tej pory staraliśmy się następujące rozwiązanie:Obsługa znaków UTF-8 w zewnętrznych tabelach Oracle

Zmieniono wartość NLS_LANG do AMERICAN_AMERICA.WE8ISO8859P1
Tried Ustawianie bazy danych zestaw znaków UTF-8
Próbowałem zmieniając NLS_LENGTH_SYMMANTIC char zamiast BYTE użyciu ALTER SYSTEM
Próbowano zmienić zestaw znaków tabeli zewnętrznej na: AL32UTF8
Próbowano zmienić zestaw znaków tabeli zewnętrznej na: UTF-8

Nic nie działa. Inne szczegóły obejmują:

  • Plik jest kodowanie UTF-8
  • System operacyjny: RHEL
  • bazy danych: Oracle 11g

niczego innego, że może brakować? Każda pomoc zostanie doceniona. Dzięki!

Odpowiedz

8

The nls_length_semantics odnosi się tylko do tworzenia nowych tabel.

Oto, co zrobiłem, aby rozwiązać ten problem.

records delimited by newline 
    CHARACTERSET AL32UTF8 
    STRING SIZES ARE IN CHARACTERS 

tj

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

Dziękujemy! Rozwiązałem mój problem tutaj. –

Powiązane problemy