2011-02-09 1 views
7

У меня есть внешняя таблица, которая читается из файла с фиксированной длиной. Ожидается, что файл содержит специальные символы. В моем случае слово, содержащее специальный символ, - «Гетеборг». Поскольку «ö» является особым символом, похоже, что Oracle рассматривает его как 2 байта. Это вызывает проблемы. Последующие поля в файлах смещаются на 1 байт, тем самым испортив данные. Кто-нибудь сталкивался с проблемой раньше. До сих пор мы пытались следующее решение:Обработка символов UTF-8 в внешних таблицах Oracle

Изменено значение NLS_LANG для AMERICAN_AMERICA.WE8ISO8859P1
Пробовал Настройка базы данных набор символов UTF-8
попытался изменить NLS_LENGTH_SYMMANTIC СИМВОЛУ вместо BYTE с помощью ALTER SYSTEM
Попробовал сменить внешний набор таблиц на: AL32UTF8
Пробовал изменить внешний набор внешних таблиц на: UTF-8

Ничего не работает. Другие детали включают:

  • Файл UTF-8 кодируются
  • Операционная система: RHEL
  • База данных: Oracle 11g

Любая вещь еще, что я мог бы быть отсутствующий? Любая помощь будет оценена. Благодаря!

ответ

8

nls_length_semantics относится только к созданию новых таблиц.

Ниже приведено то, что я сделал, чтобы исправить эту проблему.

records delimited by newline 
    CHARACTERSET AL32UTF8 
    STRING SIZES ARE IN CHARACTERS 

т.е.

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

Спасибо! Решила мою проблему здесь. –

Смежные вопросы