Oracle: импортировать файл CSV - PullRequest
24 голосов
/ 01 июня 2011

Я уже некоторое время ищу, но, похоже, не могу найти ответы, так что вот так ...

У меня есть файл CSV, который я хочу импортировать в таблицу в Oracle (9i / 10i).

Позже я планирую использовать эту таблицу в качестве поиска для другого использования.

Это фактически обходной путь, над которым я работаю, поскольку тот факт, что запрос с использованием предложения IN с более чем 1000 значений невозможен.

Как это сделать с помощью SQLPLUS?

Спасибо за ваше время! :)

Ответы [ 6 ]

21 голосов
/ 12 сентября 2012

Другое решение, которое вы можете использовать, - SQL Developer.

С его помощью вы можете импортировать из файла CSV (доступны другие файлы с разделителями).

Просто откройте представление таблицы, затем:

  • выбрать действия
  • импорт данных
  • найди свой файл
  • выберите ваши варианты.

У вас есть возможность сделать так, чтобы SQL Developer делал вставки для вас, создавал сценарий вставки SQL или создавал данные для скрипта SQL Loader (сам не пробовал эту опцию).

* * 1018 Конечно, все это спорный вопрос, если вы можете использовать только в командной строке, но если вы можете проверить его с SQL Developer локально, всегда можно развернуть сгенерированные сценарии вставки (например). * * 1019

Просто добавьте еще один вариант к двум и без того очень хорошим ответам.

21 голосов
/ 01 июня 2011

SQL Loader помогает загружать CSV-файлы в таблицы: SQL * Loader

Если вам нужен только sqlplus, то это немного усложняется. Вам нужно найти скрипт sqlloader и файл csv, а затем выполнить команду sqlldr.

5 голосов
/ 01 июня 2011

Альтернативное решение - использовать внешнюю таблицу: http://www.orafaq.com/node/848

Используйте это, если вам нужно выполнить этот импорт очень часто и очень быстро.

4 голосов
/ 01 июня 2016

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

LOAD DATA
    infile '/ipoapplication/utl_file/LBR_HE_Mar16.csv'
    REPLACE
    INTO TABLE LOAN_BALANCE_MASTER_INT
    fields terminated by ',' optionally enclosed by '"'
    (
    ACCOUNT_NO,
    CUSTOMER_NAME,
    LIMIT,
    REGION

    )

Поместите контрольный файл и CSV в одном месте на сервере. Найдите файл sqlldr exe и активируйте его.

sqlldr userid / passwd @ DBname control = Пример: sqlldr abc / xyz @ ora control = load.ctl

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

3 голосов
/ 17 ноября 2012

Кто-то попросил меня опубликовать ссылку на фреймворк !который я представил на Open World 2012. Это полный пост в блоге, который демонстрирует, как разработать решение с использованием внешних таблиц.

2 голосов
/ 03 марта 2018

С Oracle 18c вы можете использовать Встроенные внешние таблицы :

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

В случае встроенных внешних таблиц тот же синтаксис, который используется для создания внешней таблицы с оператором CREATE TABLE, может использоваться в операторе SELECT во время выполнения. Укажите встроенные внешние таблицы в предложении FROM блока запроса. Запросы, содержащие встроенные внешние таблицы, также могут включать обычные таблицы для объединений, агрегирования и т. Д.

INSERT INTO target_table(time_id, prod_id, quantity_sold, amount_sold)
SELECT time_id, prod_id, quantity_sold, amount_sold
FROM   EXTERNAL (   
    (time_id        DATE NOT NULL,     
     prod_id        INTEGER NOT NULL,
     quantity_sold  NUMBER(10,2),
     amount_sold    NUMBER(10,2))     
    TYPE ORACLE_LOADER     
    DEFAULT DIRECTORY data_dir1
    ACCESS PARAMETERS (
      RECORDS DELIMITED BY NEWLINE
      FIELDS TERMINATED BY '|')     
   LOCATION ('sales_9.csv') REJECT LIMIT UNLIMITED) sales_external;
...