Oracle: импорт CSV-файла

Я искал некоторое время, но не могу найти ответы, поэтому здесь идет...

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

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

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

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

спасибо твое время! :)

6 ответов


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

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


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

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

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

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

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

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

просто добавив еще один вариант к 2 уже очень хорошим ответам.


альтернативным решением является использование внешней таблицы:http://www.orafaq.com/node/848

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


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=нагрузка.ctl

надеюсь, что это помогает.


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


С 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;