Обновить столбец в таблице с помощью SQL * Loader? - PullRequest
5 голосов
/ 01 февраля 2012

Я написал скрипт SQL, имеющий запрос ниже. Запрос работает нормально.

update partner set is_seller_buyer=1 where id in (select id from partner 
where names in 
(
'A','B','C','D','E',... // around 100 names.
));

Но теперь вместо того, чтобы писать около 100 имен в самом запросе, я хочу получить все имена из файла CSV. Я читал о SQL * Loader в Интернете, но я не получил много по запросу обновления. Мой CSV-файл содержит только имена.

enter image description here

Я пытался

  load data
  infile 'c:\data\mydata.csv'
  into table partner set is_wholesaler_reseller=1
  where id in (select id from partner 
  where names in 
  ( 
  'A','B','C','D','E',... // around 100 names.
  ));
  fields terminated by "," optionally enclosed by '"'         
  ( names, sal, deptno )

Как мне этого добиться? Заранее спасибо.

1 Ответ

5 голосов
/ 01 февраля 2012

SQL * Загрузчик не выполняет обновления, только вставки. Таким образом, вы должны вставить свои имена в отдельную таблицу, скажем, names, и запустить обновление с этой строки:

update partner set is_seller_buyer=1 where id in (select id from partner 
where names in 
(
select names from names
));

Ваш скрипт загрузчика можно изменить на:

load data
  infile 'c:\data\mydata.csv'
  into table names
  fields terminated by "," optionally enclosed by '"'         
  ( names, sal, deptno )

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

...