Sqlloader как загрузить csv файл в таблицу оракле

Обновлено: 05.07.2024

Я довольно новичок в базах данных и программировании. Я не очень хорошо разбираюсь в компьютере lingo, так что держись за меня. У меня есть файл csv , который я пытаюсь загрузить в свою базу данных Oracle . Он содержит информацию об учетной записи, такую как имя, номер телефона, даты обслуживания и т. д. Я установил Oracle 11g Release 2 . Это то, что я делал до сих пор шаг за шагом..

1) Загрузчик Ran SQL

Я создал новую таблицу с нужными мне столбцами. Например

2) он подсказал мне, что таблица была создана. Затем я создал контрольный файл для данных в блокноте, который находился в том же каталоге, что и моя платежная таблица, и имел расширение .ctl. GIS.csv-это файл, из которого я получаю данные, и он также находится в том же каталоге и назвал его Billing.ctl, что выглядело так..

3) запустите sqlldr из командной строки, чтобы использовать управляющий файл

Вот где я застрял. Я видел видеоуроки о том, что именно я делаю, но я получаю эту ошибку:

Есть какие-нибудь идеи о том, что я здесь делаю не так?

Обновление

Я просто переместил файлы в отдельный каталог и, полагаю, преодолел предыдущую ошибку. Кстати, да, Billing.ctl и GIS.csv находятся в одном каталоге.

Но теперь у меня есть еще одна ошибка:

Ожидая ключевого слова LOAD, нашел "SERV TAP ID". "СЕРВ НАЖМИТЕ КОД","НОМЕР СЧЕТА","КОД МТР","ДОМАШНИЙ СЕРВ","СЕРВ-СТРИТ","SERV ^'

Я не понимаю, почему он придумывает эту ошибку. У моего billing.ctl есть груз.

Как вставить данные из нескольких файлов с разными столбцами в таблицу базы данных Oracle с помощью загрузчика SQL с одним управляющим файлом. В основном , У нас есть 3 CSV файлов файл 1, имеющий столбцы a,b, c файл 2, имеющий столбцы d, e,f файл 3, имеющий столбцы g, h, i Нам нужно вставить.

В настоящее время я пытаюсь использовать модуль узла Oracledb для импорта csv в мою базу данных. База данных подключена правильно, так как я могу SELECT * из MYDB. Но я не могу найти способ легко импортировать CSV в эту базу данных. *note: в настоящее время я использую jsontoCSV, а затем fswrite.

Sqlldr хочет записать файл журнала в тот же каталог, где находится управляющий файл. Но, очевидно, не может. Вероятно, у него нет необходимого разрешения.

Если вы находитесь на Linux или Unix, попробуйте выполнить следующую команду так же, как вы запускаете sqldr:

Он покажет, есть ли у вас соответствующие разрешения.

Обновление

Правильная командная строка-это:

У меня был файл csv с именем FAR_T_SNSA.csv, который я хотел импортировать непосредственно в базу данных oracle. Для этого я сделал следующие шаги, и это сработало абсолютно нормально. Вот шаги, которые вы должны выполнить:

HOW ИМПОРТИРОВАТЬ ФАЙЛ CSV В БАЗУ ДАННЫХ ORACLE ?

    Получите файл формата .csv, который будет импортирован в базу данных oracle. Вот это называется " FAR_T_SNSA.csv”

Создайте таблицу в файле sql с тем же именем столбца, что и в файле .csv. создать таблицу биллинга (iocl_id char(10), iocl_consumer_id char(10));

Создайте управляющий файл, содержащий сценарий sql*loder. В блокноте введите сценарий, как показано ниже, и сохраните его с расширением .ctl, выбрав тип файла как все типы(*). Здесь контрольный файл называется биллингом. И скрипт выглядит следующим образом:

Теперь в командной строке выполните команду:

При вызове загрузчика sql необходимо указать имя файла журнала.

Я предполагаю написать файл загрузчика Oracle, чтобы вставить / добавить данные из файла csv. Теперь у меня есть требование, когда я должен изменить столбец, заполненный существующей записью ecery, прежде чем делать insert/append. можно ли добавить какой-то оператор PL/SQL в файл сценария.

Я пытаюсь импортировать файлы CSV в таблицу oracle. Не через мастер импорта. Существует ли эффективный способ автоматического импорта?например, массовый импорт в sql server microsoft. должно быть.. Пожалуйста, дайте пошаговые варианты.

загрузите файл данных 'datafile location' в таблицу schema.tablename полей, оканчивающихся на', 'необязательно заключенными в' | ' (field1,field2, field3. )

В командной строке:

"Line 1"-может быть, что-то о windows против unix новых строк? (как я видел windows 7, упомянутый выше).

Если ваш текст: Джо сказал, "Фред был здесь со своим "Wife"".
Это сохраняется в CSV как:
"Джо сказал:" Фред был здесь со своим " "Wife""""."
(Правило состоит в том, что двойные кавычки идут по всему полю, а двойные кавычки преобразуются в две двойные кавычки). Таким образом, простое необязательное предложение Enclosed By необходимо, но недостаточно. CSVs являются жесткими из-за этого правила. Иногда вы можете использовать предложение Replace в загрузчике для этого поля, но в зависимости от ваших данных этого может быть недостаточно. Часто предварительная обработка CSV необходима для загрузки в Oracle. Или сохраните его как XLS и используйте приложение Oracle SQL Developer для импорта в таблицу-отлично подходит для одноразовой работы, но не очень хорошо для написания сценариев.

ЗАГРУЗКА ДАННЫХ INFILE 'D:\CertificationInputFile.csv' В ТАБЛИЦУ CERT_EXCLUSION_LIST ПОЛЯ, ОКАНЧИВАЮЩИЕСЯ НА"|", НЕОБЯЗАТЕЛЬНО ЗАКЛЮЧЕННЫЕ В"". ( CERTIFICATIONNAME, CERTIFICATIONVERSION )

-- Шаг 1: Создайте временную таблицу. создать таблицу биллинга (TAP_ID char(10), ACCT_NUM char(10));

-- Шаг 2: Создайте контрольный файл.

загрузите файл данных IN_DATA.txt в поля таблицы биллинга, заканчивающиеся символом ',' (TAP_ID, ACCT_NUM)

-- Шаг 3: создайте файл входных данных. IN_DATA.txt содержимое файла: 100,15678966

Похожие вопросы:

Существует ли хороший пользовательский интерфейс для создания управляющих файлов загрузчика Oracle SQL? PL / SQL Developer включает в себя функцию Text Importer (которая напоминает мастер импорта.

Я пытаюсь экспортировать некоторые таблицы из SQL Server 2005, а затем создать эти таблицы и заполнить их в Oracle. У меня есть около 10 таблиц, варьирующихся от 4 столбцов до 25. Я не использую.

Я работаю для импорта файла CSV в SQL Server Я получил код из интернета ..работает нормально, но когда я добавляю одно дополнительное поле (User_Id) с этим файлом CSV в SQL, то это дает ошибку . Я.

Как вставить данные из нескольких файлов с разными столбцами в таблицу базы данных Oracle с помощью загрузчика SQL с одним управляющим файлом. В основном , У нас есть 3 CSV файлов файл 1, имеющий.

В настоящее время я пытаюсь использовать модуль узла Oracledb для импорта csv в мою базу данных. База данных подключена правильно, так как я могу SELECT * из MYDB. Но я не могу найти способ легко.

Я предполагаю написать файл загрузчика Oracle, чтобы вставить / добавить данные из файла csv. Теперь у меня есть требование, когда я должен изменить столбец, заполненный существующей записью ecery.

Я пытаюсь импортировать файлы CSV в таблицу oracle. Не через мастер импорта. Существует ли эффективный способ автоматического импорта?например, массовый импорт в sql server microsoft. должно быть.

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

Какова наилучшая практика (с точки зрения производительности) импорта файла .CSV в файл SQL Server ? В моем проекте есть требование, по которому я загружу файл .csv (ex.EmployeeData) со стороны.

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

Возможности SQL*Loader

  • Загрузка данных из разных файлов в одной сессии
  • Загрузка данных в разные таблицы в одной сессии
  • Указание кодировки файла данных
  • Использование SQL функций перед загрузкой
  • Генерация уникальных ключей для колонок
  • Ограничение вставляемых данных по условию
  • Загрузка двоичных данных
  • Запись ошибочных данных в файл ошибок




На входе требуется два файла:

1) Файл данных

2) Управляющий файл (.CTL)

Файл описания структуры данных (loader control file), содержит описание типов данных столбцов, способ разделения столбцов, как обрабатывать данные и т.д. Именно в этом файле задаются настройки обработки файла данных. Часть настроек, можно переопределить через командную строку при запуске Oracle SQL*Loader.

Выходные данные:

1) Данные в таблице БД

2) Файл отчета (Log file)

Управляющий файл SQL*Loader (CTL)

INSERT Используется по умолчанию. Таблица перед загрузкой не должна содержать данные. Если в таблице есть строки данных, то выполнение загрузки SQL*Loader-ом не будет выполнено
APPEND Позволяет добавлять строки в таблицу таким образом, чтобы они не оказывали воздействия на уже существующие строки данных.
REPLACE Удаляются все имеющиеся в таблице строки, а затем загружаются новые. При удалении строк срабатывают триггеры существующие на таблице.
TRUNCATE Удаляются все имеющиеся в таблице строки. Триггеры не срабатывают.

Запуск импорта данныхSQL*Loader

Для запуска загрузки данных через SQL*Loader

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

Опции командной строки SQL*Loader

Список параметров можно получить запустив SQL*Loader без указания параметров:

Данные для загрузки непосредственно в управляющем файле

Пример данных содержащихся в управляющем файле. Начало данных определяет оператор BEGINDATA

Выполняем скрипт test.sh и смотрим результат:

Плюс создался файл лога XX_MYEXAMPLE.log

Данные с разными разделителями в данных + форматирование даты

Когда-то наиболее естественным способом загрузки структурированных данных в БД Oracle была загрузка при помощи SQL*Loader. Требовалось подготовить файл с параметрами, управляющими загрузкой, и вызвать утилиту sqlloader, передав ей управляющий файл и файл с данными.

Затем производители Oracle предоставили новый механизм для загрузки данных из внешних файлов - external tables. Нужно создать внешнюю таблицу командой DDL CREATE TABLE , указав внешний файл в качестве источника данных и описав его структуру. Средства для описания структуры очень похожи на средства описания структуры для SQL*Loader.

Если вам приходится часто загружать данные из структурированных текстовых файлов, то и SQL*Loader и внешние таблицы начинают казаться слишком громоздкими. Оба инструмента позволяют достаточно гибко описывать структуры загружаемых данных, определять проверки и преобразования данных в ходе загрузки. Это плюс. Минус в том, что для загрузки в БД данных из очередного внешнего файла нужно специально создавать для этого файла таблицу, будь то обычная таблица, в которую загрузит данные SQL*Loader, или внешняя таблица, связанная с внешним файлом при ее создании.

В этой статье я расскажу о еще одном подходе к загрузке данных из внешних csv-файлов (которым уже давно успешно пользуюсь).

Для того, чтобы данные из csv-файла стали доступны для манипуляций при помощи языка SQL, прежде всего, для запроса SELECT , нужно решить две задачи:

  1. прочитать содержимое внешнего файла,
  2. представить данные из файла в виде таблицы.

Прочитать содержимое внешнего файла можно при помощи пакета UTL_FILE . Альтернативно, можно загрузить внешний файл в CLOB при помощи пакета DBMS_LOB . Оба эти способа предполагают, что файл помещен в директорию на сервере, для которой в БД создан объект directory. Есть и третий способ - загрузить файл в БД через web-интерфейс при помощи PL/SQL Gateway, после чего содержимое файла становится доступным внутри БД как LOB.

Когда csv-файл загружен в БД и его содержимое доступно для PL/SQL, представить его данные в виде таблицы - это вопрос разбиения данных на строки, строк - на поля, и возврата строк из конвейерной (pipelined) функции.

Таким образом, нам нужна конвейерная функция, которая будет принимать в качестве параметра имя csv-файла и возвращать его содержимое в виде таблицы. Конвейерная функция возвращает таблицу, тип которой должен быть определен на уровне схемы данных, как и тип строки данной таблицы. Для универсальности, объектный тип, представляющий строку таблицы, будет содержать атрибуты типа VARCHAR2, где каждый атрибут будет представлять отдельное поле (столбец) таблицы.

Создам тип t_varchar_row для представления строки таблицы с 5-ю столбцами (при необходимости количество столбцов можно увеличить):

Значения типа t_varchar_row создаются с помощью конструктора:

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

Теперь, когда идея оформилась и ее реализуемость не вызывает сомнений, осталось собрать вместе код, загружающий данные из внешнего файла, и код для представления этих данных в виде таблицы t_varchar_row_table .

Сделаю это в функции csv :

Помимо указания файла и директории для загрзуки, параметры функции позволяют указать

  • p_charset - кодировку csv-файла,
  • p_sep - символ-разделитель полей csv-файла,
  • p_newline - символ(ы) завершения строки csv-файла.

Для разбора содержимого файла, загруженного в CLOB переменную l_clob в функции используется SQL семантика для LOB, позволяющая работать с большим объектом (N)CLOB как со строкой VARCHAR2. (Об SQL семантике для LOB я упоминал в статье О работе с большими объектами в СУБД Oracle.)

Для тестирования создам файл Hemingway.csv со списком романов Хэмингуэя и годами публикации:

Помещу файл в директорию файловой системы, доступную через объект directory FILES_DIR :

Если у вас нет подходящего объекта directory, создать его можно командой:

Получу данные из файла Hemingway.csv с помощью SELECT и функции csv :

Обратите внимание, что в последнем случае, когда SELECT выбирает не все строки, освобождение временного CLOB происходит в обработчике исключения NO_DATA_NEEDED функции csv .

Ещё один пример. Скопирую в каталог /home/oracle/files файл со словами английского языка, имеющийся во многих ОС семейстав Unix. Каждая строка файла содержит 1 слово, что позволяет рассматривать этот файл как как csv-файл с одним полем в строке:

Как видим, в файле 479623 слова. Получу его содержимое с помощью функции csv :

На последний запрос понадобилось больше 80 секунд!

Очевидно, что SQL семантика для LOB - не самый эффективный способ работы с содержанием больших объектов. Ведь при выполнении функций, перегруженных для типа (N)CLOB, неявно создаются временные (N)CLOB'ы.

Создам оптимизированную по быстродействию функцию csv2 , переписав фрагмент, ответственный за выделение строк из CLOB'а:

Проверим, насколько новая версия эффективней прежней:

Что ж, выбор из двух версий очевиден.

Отмечу ограничение функции сsv2 : строки в csv-файле не могут быть слишком длинными (максимальная длина строки зависит от кодировки, но не длиннее 32767). Это ограничение можно снять, отказавшись от предварительного выделения строк из содержимого СLOB. Кроме того, функция не допускает символов завершения строки и символов-разделителей в полях файла csv, так как не предусматривает их экранирования с помощью \ (как принято в Unix) или заключения значений полей в кавычки (как принято у Microsoft). При желании, можно реализовать тот и другой вариант, переработав фрагмент функции csv2 , отвечающий за разбор содержания CLOB.

В заключение, удалю демонстрационные функции и типы:

Продемонстрированный подход к загрузке данных из csv-файлов имеет преимущество перед SQL*Loader и external tables, не требуя создания таблиц специально для загрузки данных.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

поместите файл управления и csv в одном месте на сервере. Найдите sqlldr exe и вызовите его.

sqlldr userid / passwd@DBname control= Пример: sqlldr abc/xyz@Ora control=нагрузка.ctl

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

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

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

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

SQL * Loader - это очень полезный инструмент, предоставляемый Oracle, который обеспечивает высокоскоростную загрузку объемных данных, которые загружают данные от внешних файлов в таблицу базы данных Oracle, эта статья сделает простое введение в SQL * Doader Oracle 12C. Demo.

Использование погрузчика SQL * реализовано через инструкцию командной строки Oracle, которая является клиентским инструментом, который может указать соответствующую опцию в виде значения клавиш или использовать файлы файлов параметров. Следующее показывает SQL. * Загрузчик работает:


Файл управления в основном используется для управления поведением нагрузки данных, в том числе где данные, как разрешать и интерпретировать данные, где вставлять данные и т. Д. Обычно файл управления включает в себя три части:

Для загрузки данных SQL * Loader предоставляет три метода:

  • Традиционная дорожка нагрузки;
  • Прямой путь загрузки;
  • Внешняя загрузка таблицы;

SQL * Loader реализован командой sqlldr, введите команду для ввода информации о настройке, соответствующей инструкции:

3.1 Пример

Загрузить файлы данных, файл данных сохраняется в файле управления.

1) Создайте тестовую таблицу

2) Создайте файл управления

Описание:

У нас есть четыре варианта загрузки данных в таблицу, соответственно: вставить, добавить, заменить и усекать.

Файл может указать Inflile, BadFile, DiscardFile.

Если вы загружены прямым путем, вам необходимо указать опцию Direct = True.

3) Загрузить данные

4) Просмотр данных

3.2 Пример 2.

Если данные в файле данных, файл управления не требует указанных данных.

1) Создайте файл данных

2) Создайте файл управления

3) Загрузить данные

3.3 Пример три

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

1) Создайте файл данных

2) Создайте файл управления

3) Загрузка данных

3.4 Пример 4.

Для столбцов данных вы можете указать тип данных поля.

1) Создайте файл управления, укажите тип поля

2) Создайте файл управления, укажите постоянное значение

3) Создайте файл управления, укажите текущее время

4) Создайте файл управления, укажите последовательность использования


5) Создайте файл управления, используйте функцию для загрузки данных

3.5 Пример 5.

Укажите параметры External_Table = Generate_only, внешняя таблица может быть сгенерирована.

Читайте также: