#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 распознать, какая запятая что обозначает.