Разделитель управляющего файла Oracle SQL Loader

Я хочу импортировать таблицу с информацией о клиентах в свою базу данных. Структура файла данных (простой текст) вкратце показана ниже.

"Cust_ID    Cust_Name   Level"
"0001   Eric Cartman    05"
"0002   Kyle Broflovski 02"

Каждая строка, заключенная в ", является записью, а разделитель - табуляцией. Итак, в моем управляющем файле SQL Loader я напишу что-то вроде этого:

FIELDS TERMINATED BY '  '
    (Cust_ID, --?????
     Cust_Name,
     Level TERMINATED BY '"' )

Я хотел бы сказать загрузчику SQL игнорировать " перед каждым Cust_ID. Что мне добавить сюда? Спасибо.


person goldfrapp04    schedule 05.10.2013    source источник
comment
Я предлагаю сначала загрузить его в промежуточную таблицу с кавычками. Затем вы можете избавиться от них с помощью запросов на обновление.   -  person Dan Bracuk    schedule 06.10.2013
comment
@DanBracuk Спасибо за ваш комментарий. Если бы это был случай из реальной жизни, а не домашнее задание, я бы определенно сделал, как вы сказали. Но поскольку это домашнее задание, и требуется просто загрузить его в промежуточную таблицу, я думаю, мне нужно найти способ, чтобы промежуточная таблица выглядела красиво :(   -  person goldfrapp04    schedule 06.10.2013
comment
Вы знаете, как избавиться от кавычек, когда данные находятся в промежуточной таблице?   -  person Dan Bracuk    schedule 06.10.2013


Ответы (1)


Чтобы игнорировать двойные кавычки в начале записи. Это определяет поле-заполнитель, которое я условно назвал quote, которое заканчивается первым ":

options (skip=1)
load data
truncate into table t42
fields terminated by '  '
(
    quote filler terminated by '"',
    cust_id,
    cust_name,
    cust_level terminated by '"'
)

В этом случае значение этого поля quote будет нулевым, но мы все равно его игнорируем, так что это не важно.

С вашим файлом данных в виде таблицы, определенной как:

create table t42(cust_id number, cust_name varchar2(20), cust_level number);

... ваши данные вставляются как:

select * from t42;

   CUST_ID CUST_NAME            CUST_LEVEL
---------- -------------------- ----------
         1 Eric Cartman                  5
         2 Kyle Broflovski               2

Я назвал третий столбец cust_level, потому что level - зарезервированное слово; вы можете заставить его использовать, но это вызовет у вас боль. Также обратите внимание, что я использовал truncate, поэтому он заменит все существующие данные в вашей таблице; если вы добавляете новые данные, измените их на append.

person Alex Poole    schedule 06.10.2013