Пропуск полей данных при загрузке данных с разделителями с использованием SQLLDR

Рассмотрим сценарий ниже:

Таблица T1 (f1, f2, f3);

Дата файлы:

a|b|c|d
w|x|y|z

Я хочу загрузить эти данные, пропустив второе поле следующим образом:

f1    f2    f3 
---   ---   ---
a     d     c
w     z     y

Был бы очень признателен за вашу помощь или любой указатель в создании контрольного файла для достижения этой цели.

1 ответ

Решение

Определите столбец, который вы хотите пропустить, как FILLER. Помните, что порядок столбцов в контрольном файле обычно соответствует порядку их расположения в файле данных. Если имя соответствует столбцу в таблице, это то, куда оно пойдет.

...
(
  f1 CHAR,  -- 1st field in the file, goes to column named f1 in the table
  X FILLER, -- 2nd field in the file, ignored
  f3 CHAR,  -- 3rd field in the file, goes to column named f3 in the table
  f2 CHAR   -- 4th field in the file, goes to column named f2 in the table
)

Другими словами, порядок столбцов в контрольном файле соответствует порядку их расположения в файле данных, а не их порядку в таблице. Это соответствует имени, а не порядку.

РЕДАКТИРОВАТЬ - я добавил несколько комментариев для объяснения, но я считаю, что они не могут быть в этой позиции в реальном файле. Смотрите ниже полный пример:

Создать таблицу:

CREATE TABLE T1
(
  F1  VARCHAR2(50 BYTE),
  F2  VARCHAR2(50 BYTE),
  F3  VARCHAR2(50 BYTE)
);

Контрольный файл, example.ctl:

load data 
infile *
truncate
into table t1
fields terminated by '|' trailing nullcols
(
f1 CHAR,
x FILLER,
f3 CHAR,
f2 CHAR
)
BEGINDATA
a|b|c|d
w|x|y|z

Запустить его:

C:\temp>sqlldr userid=login/password@database control=example.ctl
SQL*Loader: Release 11.2.0.1.0 - Production on Wed Apr 22 11:25:49 2015
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
Commit point reached - logical record count 2

Выберите из таблицы:

Надеюсь, это поможет.

Другие вопросы по тегам