Обнаружение полей SQLLDR и NULL в столбце для импорта - PullRequest
0 голосов
/ 23 мая 2011

SQLLDR и CTL файл

Получил файл CSV для импорта.

Я хочу указать в своем файле CTL вставку только в мою таблицу, когда у меня есть пустое значение в определенном столбце в моем файле CSV. E.G Я хочу загружать только записи пользователей, у которых нет дата окончания.

Я пробовал разные варианты

  • Когда TERMINATIONDATE = ''
  • Когда TERMINATIONDATE = ""
  • Когда TERMINATIONDATE = null
  • Когда TERMINATIONDATE = 'null'

это работает только когда я использую - Когда TERMINATIONDATE! = '' тогда я получаю всех своих сотрудников, которые были уволены. Но я хочу обратного ...

Разве не похоже, что это возможно?

мой файл CTL

OPTIONS (SKIP=1)
LOAD DATA
INFILE 'C:\temp\users.csv' 
BADFILE 'C:\temp\users.bad'
DISCARDFILE 'C:\temp\users.dsc'
TRUNCATE
INTO TABLE "alawakaba"."users"
When TERMINATIONDATE = ''
FIELDS TERMINATED BY '|'
OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
ID,
FIRSTNAME,
LASTNAME,
FUNCTION,
DEPARTMENT,
COSTCENTER,
HIREDATE,
Field8 FILLER,
TERMINATIONDATE,
LOCCODE
)

(Колонка 8 - это то, что мне не нужно, поэтому я пропускаю это)

tnxs для твоего понимания.

Ответы [ 2 ]

1 голос
/ 23 мая 2011

Должно работать со следующим предложением:

WHEN TERMINATIONDATE = BLANKS
0 голосов
/ 26 мая 2011

о, понял .. Это не окончательное решение и имеет некоторые накладные расходы, но я могу сделать это за 2 прогона

a) запустить как CTL выше.Изменить Когда TERMINATIONDATE = ''
до Когда TERMINATIONDATE! = ''

Отброшенные записи будут вставлены в DISCARDFILE 'C: \ temp \ users.dsc' теперь мой удаленный файл будет содержать всезаписи, которые я хотел загрузить

b) выполнить вторую команду CTL, чтобы получить файл DSC в качестве входных данных, больше не пропускать записи и не указывать условие when, ни

LOAD DATA
INFILE 'C:\temp\users.dsc' 
BADFILE 'C:\temp\users.bad'
DISCARDFILE 'C:\temp\users-run2.dsc'
TRUNCATE
INTO TABLE "alawakaba"."users"
FIELDS TERMINATED BY '|'
OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
ID,
FIRSTNAME,
LASTNAME,
FUNCTION,
DEPARTMENT,
COSTCENTER,
HIREDATE,
Field8 FILLER,
TERMINATIONDATE,
LOCCODE
)

Не самый лучший или самый быстрый, но он делает свое дело.

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

K

...