Справка по внешней таблице — проблема с ПОЛЯМИ, ЗАКАНЧИВАЮЩИМИСЯ НА ‘,’ если в значении поля существует дополнительная запятая

#oracle #external-tables

#Oracle #внешние таблицы

Вопрос:

У меня есть текстовый файл, разделенный запятой, и я использую внешнюю таблицу для загрузки данных ниже:

 create table test_ext_table
     CUSTOMER_ID NUMBER, 
     CUSTOMER_NAME       VARCHAR2(255),  
     CUSTOMER_NUMBER     NUMBER)  
     ORGANIZATION EXTERNAL 
    ( type oracle_loader 
      default directory TXT_DIR 
      access parameters 
      (RECORDS delimited by newline SKIP 1 
      FIELDS TERMINATED BY ','
       LRTRIM 
       MISSING FIELD VALUES ARE NULL 
      ) 
      LOCATION (TEST.txt)
      )
      REJECT LIMIT UNLIMITED);
  

Я знаю, что внешняя таблица распознает каждое поле, заканчивающееся запятой, но, допустим, в текстовом файле у меня есть следующее

TEST.txt

 customer_id, customer_name, customer_number
1,a,10
2,b,11
3,c,12
4,Hello, Inc,13

  

Для 4 строки в текстовом файле из-за наличия дополнительного ‘,’ в поле customer_name внешняя таблица не может правильно прочитать имя клиента в таблице. Есть ли способ настроить внешнюю таблицу так, чтобы она игнорировала дополнительные ‘,’ или любые специальные символы?

Комментарии:

1. Как СУБД должна угадывать, какая запятая правильная, а какая неправильная? Если в тексте появляются запятые, то запятая просто не является подходящим разделителем. Выберите другое.

Ответ №1:

Насколько я знаю, есть 2 способа сделать это:

  • необязательно заключать строку, например, в двойные кавычки
  • замените разделитель с запятой на что-то другое, например, точку с запятой

В противном случае нет способа оставить все «как есть» и заставить Oracle распознать, какая запятая что обозначает.