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;