Обновить таблицу Oracle значениями из файла CSV - PullRequest
7 голосов
/ 23 декабря 2009

У меня есть файл CSV, который содержит идентификатор и несколько других столбцов. У меня также есть таблица в оракуле, где идентификатор идентифицирует строку. Как наилучшим образом заменить значения в таблице значениями в файле CSV, оставив другие столбцы такими же, какими они были раньше?

Это должно быть сделано с помощью инструментов, доступных в самом Oracle (например, скрипты PL / SQL или SQL), я не могу использовать «настоящий» язык сценариев (Python, ...) или «настоящую» программу.

Спасибо, Томас

Ответы [ 5 ]

10 голосов
/ 23 декабря 2009

Посмотрите на ВНЕШНИЕ СТОЛЫ в документе Oracle. Вы можете скопировать файл csv на серверную коробку Oracle и заставить Oracle представить его как «обычную» таблицу, в которой вы можете выполнять запросы.

Тогда проблема просто заключается в копировании данных из одной таблицы в другую.

Внешние таблицы действительно очень полезны для обработки таких данных.

5 голосов
/ 23 декабря 2009

«Стандартный» инструмент Oracle для загрузки файлов данных типа CSV в базу данных: SQLLoader . Обычно он используется для вставки записей, но вместо этого можно настроить управляющий файл для запуска обновления, если вы этого хотите.

Это не самый простой инструмент в мире (читать «это задница»), но он является частью стандартного инструментария и выполняет свою работу.

1 голос
/ 23 декабря 2009

Использовать SQL * Loader

sqlldr username@server/password control=load_csv.ctl

Файл load_csv.ctl

load data
 infile '/path/to/mydata.csv'
 into table mydatatable
 fields terminated by "," optionally enclosed by '"'          
 ( empno, empname, sal, deptno )

где / path / to / mydata.csv - это путь к CSV-файлу, который вам нужно загрузить, что-то в Windows как C: \ data \ mydata.csv . Имя таблицы mydatatable . Столбцы перечислены в порядке их появления в файле csv в последней строке.

Если у вас не очень большой объем данных, это самый простой способ получения данных. в. Если данные необходимо загружать на регулярной основе, их можно преобразовать в сценарий оболочки и запустить CRON в системе U * NX.

1 голос
/ 23 декабря 2009

Другой вариант - построчно читать в файле, анализировать поля в строке, используя что-то вроде REGEXP_REPLACE, и обновлять соответствующие строки. Вы можете разобрать строку, разделенную запятыми, как показано ниже:

SELECT TRIM(REGEXP_REPLACE(strLine, '(.*),.*,.*', '\1')),
       TRIM(REGEXP_REPLACE(strLine, '.*,(.*),.*', '\1')),
       TRIM(REGEXP_REPLACE(strLine, '.*,.*,(.*)', '\1'))
  INTO strID, strField1, strField2      FROM DUAL;

Это полезно, если ваш сайт не позволяет использовать внешние таблицы.

Делись и наслаждайся.

0 голосов
/ 05 сентября 2012

Сначала создайте таблицу и поместите все данные CSV в эту таблицу, а затем напишите курсор, чтобы обновить таблицу оракула, создав таблицу CSV, соответствующую идентификаторам

ех

create table t

, а затем импортируйте данные CSV в эту таблицу.

теперь напишите курсор

declare
cursor c1 is
select * from t1;
begin
update Oracle table
set
t1.Column=t2.column
where t1.id=t2.id;

Я думаю, что это будет работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...