импортировать CSV-файл в таблицу с помощью SQL Loader [но большой нет. столбцов]

Я хочу импортировать данные в виде файла csv в таблицу [используя Oracle SQL developer]. У меня таких файлов сто и в каждом около 50 столбцов.

Из вики SQL*Loader (http://www.orafaq.com/wiki/SQL*Loader_FAQ)

 load data
 infile 'c:\data\mydata.csv'
 into table emp
 fields terminated by "," optionally enclosed by '"'          
 ( empno, empname, sal, deptno )  //these are the columns headers

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

Более того, думаю, я хочу автоматизировать его для всех 100 файлов.


person prateek    schedule 11.06.2012    source источник
comment
Вероятно, вам потребуется больше времени, чтобы что-то написать, чем делать это вручную. Как насчет того, чтобы просто скопировать и вставить заголовок из файла CSV в свой код, все, что вам нужно сделать, это добавить запятые.   -  person Limey    schedule 11.06.2012
comment
ЕСЛИ вы хотите отказаться от присвоения имен полям, то в каждой записи файла ДОЛЖНО быть столько полей, сколько полей в таблице. Какую ОС вы используете? UNIX или набор инструментов Unix могут сделать это с минимальными усилиями по написанию кода.   -  person jim mcnamara    schedule 11.06.2012
comment
@jimmcnamara , да таких же нет. полей в файле записи и в таблице. Я использую окна   -  person prateek    schedule 12.06.2012
comment
В таких случаях (небольшое количество строк, и я предполагаю, что это разовый случай) я использую Excel. Откройте файл CSV, сохраните его как xls, а затем для каждой строки создайте оператор вставки, ссылаясь на данные в столбцах. Завершите каждую строку точкой с запятой, вырежьте и вставьте в свой любимый инструмент базы данных, а затем просто нажмите кнопку запуска. Вы можете автоматизировать 100 файлов с помощью скрипта vb. В целом я считаю, что это обычно проще, чем использование импортеров блоков.   -  person Dave Richardson    schedule 16.06.2012


Ответы (3)


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

После того, как вы запишете столбцы в том порядке, в котором они появляются в ваших CSV-файлах, вы можете автоматизировать этот скрипт для всех ваших файлов, набрав:

infile *.csv
person iwita    schedule 06.06.2018

Вы можете попробовать загрузчик Oracle csv. Он автоматически создает таблицу и управляющий файл на основе содержимого csv и загружает csv в таблицу оракула с помощью загрузчика sql.

person Ari    schedule 02.05.2013

Альтернативой sqldr, которая делает то, что вам нужно, является команда LOAD в SQLcl. Он просто сопоставляет строку заголовка в csv с таблицей и загружает ее. Однако это не так эффективно и не так хорошо контролируется, как sqlldr.

LOAD [schema.]table_name[@db_link] file_name

Вот полная помощь для этого.

sql klrice/klrice
...
KLRICE@xe>help load
LOAD
-----

Loads a comma separated value (csv) file into a table.
The first row of the file must be a header row.  The columns in the header row must match the columns defined on the table.

The columns must be delimited by a comma and may optionally be enclosed in double quotes.
Lines can be terminated with standard line terminators for windows, unix or mac.
File must be encoded UTF8.

The load is processed with 50 rows per batch.
If AUTOCOMMIT is set in SQLCL, a commit is done every 10 batches.
The load is terminated if more than 50 errors are found.

LOAD [schema.]table_name[@db_link] file_name
KLRICE@xe>

Пример из репозитория git, который у меня есть по адресу https://github.com/krisrice/maxmind-oracledb

SQL> drop table geo_lite_asn;

Table GEO_LITE_ASN dropped.

SQL> create table geo_lite_asn (
  2     "network" varchar2(32),
  3     "autonomous_system_number" number,
  4     "autonomous_system_organization" varchar2(200))
  5  /

Table GEO_LITE_ASN created.

SQL> load geo_lite_asn GeoLite2-ASN-CSV_20180130/GeoLite2-ASN-Blocks-IPv4.csv
--Number of rows processed: 397,040
--Number of rows in error: 0
0 - SUCCESS: Load processed without errors
SQL> 
person Kris Rice    schedule 04.02.2018