Утилита автоматического импорта DBF-файла в БД Oracle | |
---|---|
sphinx Сообщений: 31166 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
Добрый день!
В связи со служебной необходимостью наваял за пару дней означенную утилиту. Изначально задумывался вариант с INI-файлом, но задача была поставлена так, чтобы работать с командной строкой. Описание параметров находится в файле README.TXT. Описание работы программы ------------------------- Принятый параметром DBF-файл анализируется с точки зрения структуры и по этим данным формируются SQL-скрипт (для создания таблицы аналогичной структуры в БД Oracle) и CTL-файл (для загрузки данных CSV-файла с помощью SQLLOADER), а также 2 BAT-файла: для запуска скрипта SQLPLUS формирования таблицы и для запуска загрузчика SQLLOADER. Примеры вызова программы с параметрами можно посмотреть в файлах 1.BAT, 3.BAT, 5.BAT В ходе разработки учтены разные подводные камни: - в символьных полях удаляются управляющие символы (CHR(1)... CHR(13) ), из-за них строки выпадают в BAD-файл; - корректируется разделитель целой и дробной части в числовых полях; - логическое поле преобразуется в NUMERIC(1) - в ORACLE 10 поля с логическим типом еще не было; - корректно загружаются строки с символом ["], c экранированием я нашел идею бесперспективной, надо вычислять позицию этого символа в строке, сделал по-другому; - MEMO-поля кастуются к символьному виду (есть идеи, как выгрести все содержимое без обрезки? на низком уровне вычитывать?) - MEMO-поля поля всегда приводятся к странице 1251 (наверное сделаю это параметром) Дальнейшие улучшения -------------------- 1) BAT-файлы сделать похитрее - с обработкой кода возврата при выполнении операции. 2) Ввести параметр для выбора режима обновления, дозаписи или полной перезаписи в таблице ORACLE 3) MEMO-поля (?) В общем, потестируйте, кому не трудно и есть Oracle, если кому сгодится - пользуйте. Если есть вопросы - задавайте. Если есть предложения - озвучивайте и приводите общее описание (и примеры) реализации. ------------------ "Veni, vidi, vici!"(с) |
Re: Утилита автоматического импорта DBF-файла в БД Oracle | |
---|---|
akvvohinc Сообщений: 4203 Откуда: Москва Дата регистрации: 11.11.2008 |
Пробежался бегло по коду. По сути сказать нечего, так как в Оракл ничего не выгружаю.
Поэтому так - по мелочи. 1) раз выгрузку производит Фокс в Оракл, то это скорее экспорт, а не импорт; 2) Последний день месяца от даты можно определять проще, чем в 4 функции
вместо
3) Закрывать таблицу можно в одну строку вместо 3 и проверка не требуется:
вместо
4) В процедуре errHandler 866-я кодировка текста - не знаю, может это зачем-то нужно. 5) Почему здесь не достаточно одного лишь TRANSFORM'а c шаблоном '99999'? Разве так нагляднее?
6) Здесь либо у автора, либо у меня какой-то глюк с логикой:
Непонятна и общая логика, и конкретно как могут вместе работать эти две строки:
Первая возвращает имя dbf-файла для таблицы, открытой в текущей рабочей области (что в ней - загадка!). Вторая хочет открыть этот файл в свободной области, то есть, повторно. Что без опции AGAIN получиться не должно, а значит, ошибка "File is in use" обеспечена. 7) Весь миллион одинаковых конструкций, разбросанных по всей программе, подобных этой:
а
8) Зачем здесь 3 функции CHRTRAN()? Ну, если для наглядности, то пусть будет:
9) В некоторых случаях вместо "OR ... OR ... OR ..." INLIST() был бы уместен. |
Re: Утилита автоматического импорта DBF-файла в БД Oracle | |
---|---|
sphinx Сообщений: 31166 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
Это кусок из рабочей программы, функции писались на скорую руку, что-то подзабылось...
Спасибо, учтем. ------------------ "Veni, vidi, vici!"(с) |
Re: Утилита автоматического импорта DBF-файла в БД Oracle | |
---|---|
pasha_usue Сообщений: 3647 Откуда: Е-бург Дата регистрации: 06.10.2006 |
А че q не помогает? Или его тоже нет в 10-ке?
dbms_output.put_line(q'[Д'Артаньян]'); |
Re: Утилита автоматического импорта DBF-файла в БД Oracle | |
---|---|
Аркадий Сообщений: 252 Откуда: Санкт-Петербург Дата регистрации: 30.11.2005 |
|
Re: Утилита автоматического импорта DBF-файла в БД Oracle | |
---|---|
leonid Сообщений: 3202 Откуда: Рига Дата регистрации: 03.02.2006 |
Судя по всему akvvohinc писал по памяти и немного ошибся. Конечно же надо вот так:
|
Re: Утилита автоматического импорта DBF-файла в БД Oracle | |
---|---|
akvvohinc Сообщений: 4203 Откуда: Москва Дата регистрации: 11.11.2008 |
Да, спасибо! Я помнил только, что фишка способа была в вычитании DAY(). |
Re: Утилита автоматического импорта DBF-файла в БД Oracle | |
---|---|
Igor Korolyov Автор Сообщений: 34580 Дата регистрации: 28.05.2002 |
Мемо поля через кучу отдельных файлов загружаются.
------------------ WBR, Igor |
Re: Утилита автоматического импорта DBF-файла в БД Oracle | |
---|---|
sphinx Сообщений: 31166 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
Проект стихийно развивается..
Пока добавил реализовал в виде отдельного файла пакетную обработку (т.е. в ADIR() складываются файлы по указанной маске, затем в цикле все перебирается и загружается... в одну таблицу - реализация загрузки ФИАС). Видимо надо еще вводить параметр, который не только укажет режим загрузки (APPEND/REPLACE/TRUNCATE), но и параметр, который определит загрузку всех файлов в одну таблицу (пример - загрузка ФИАС), или каждый файл - в свою таблицу (например, разные справочники с разной структурой и разным содержанием). Еще убрал подчеркивание в имени столбцов - Оракл позволяет ведь в кавычках имена создавать, поэтому проблема зарезервированных слов решена красиво. Итого предстоит: 1) Указывать список загружаемых полей. Тоже не все так однозначно - просто пропускать какие-то при загрузке (NULL TRAILERS), или именно урезанную структуру делать на сервере. Опять параметром? 2) Пакетную обработку перенести в утилиту, там можно разобрать и организовать быстрый и увлекательный процесс загрузки. 3) Кавычки сделать через экранирование. Люди так делают. 4) МЕМО-поля в полном объеме. Пока не горит, будет время - помозгую, как "через кучу файлов" сделать. 5) Надо как-то вести лог, встречались ли в каких-либо строках управляющие символы. Пока есть идея вываливать XML с такой инфой: 1) номер строки 2) имя поля 3) АСКИ-код символа 4) позиция символа в строке. Не знаю практическое применение, но просили сделать (несрочно, в будущем). А вы что думаете? 6) Прочее (всякие мелочи, типа удалять за собой файлы, или переносить их в отдельный каталог, убрать ДОС-окна и вывести красивый прогресс-бар, и т.д. Если что забыл - добавлю. Ну, пожелания те же. ------------------ "Veni, vidi, vici!"(с) |
Re: Утилита автоматического импорта DBF-файла в БД Oracle | |
---|---|
Igor Korolyov Автор Сообщений: 34580 Дата регистрации: 28.05.2002 |
Не надо так делать. Никогда. Равно как и русские имена полей/таблиц и прочих объектов БД. Хорошая схема БД должна работать без надобности в "закавычивании" идентификаторов - имён объектов (кстати, они при этом становятся регистрочувствительными - чего я тоже крайне не советую делать). ------------------ WBR, Igor |
© 2000-2024 Fox Club  |