Использование IBEScript
Для чего:
Часто наши доработки включают создание ряда дополнительных таблиц, процедур, триггеров и TMS. Для того чтобы перенести эти наработки другому клиенту(в другую базу) приходится последовательно через IBExpert. Тут есть возможность для ошибок да и процесс по времени затягивается. Есть решение использовать IBEScript для пакетного добавления данных в БД.
Что такое IBEScript:
Это приложение является значительно расширенным аналогом isql.exe (консольная утилиты предоставляющей доступ через SQL до баз Firebird). Кроме дублирования функционала isql-утилиты, IBEScript расширен специальными командами под названием IBEBlock. Количество команд переваливает за 3 сотни.
Как это работает
Рассмотрим по шагам на примере формирования выгрузки в созвездие Для работы выгрузки я использую ТМС для запуска, Несколько процедур для формирования данных и также несколько временных таблиц.
1. Заходим в IBExpert и получаем скрипт на создание таблицы
/******************************************************************************/ /*** Generated by IBExpert 08.04.2019 9:25:15 ***/ /******************************************************************************/ /******************************************************************************/ /*** Following SET SQL DIALECT is just for the Database Comparer ***/ /******************************************************************************/ SET SQL DIALECT 3; /******************************************************************************/ /*** Tables ***/ /******************************************************************************/ CREATE GENERATOR GEN_SOZVEZDIE_ACTION_MOVE_ID; CREATE TABLE SOZVEZDIE_ACTION_MOVE ( ID INTEGER, MAP_PHARMACY_ID DM_TEXT /* DM_TEXT = VARCHAR(250) */, DISTRIBUTION_ID DM_TEXT /* DM_TEXT = VARCHAR(250) */, BATCH_ID DM_TEXT /* DM_TEXT = VARCHAR(250) */, DOC_DATE DM_TEXT /* DM_TEXT = VARCHAR(250) */, DOC_TYPE DM_TEXT /* DM_TEXT = VARCHAR(250) */,
Сохраняем полученный скрипт в файл - SOZVEZDIE_ACTION_MOVE.sql Повторяем этот шаг для всех требуемых процедур и таблиц.
Так же выгружаем нашу ТМС - заходим в таблицу GROUPS и выгружаем поле DATA в формате hex в файл - TMS_SOZVEZDIE.hex
Все полученные таким образом файлы помещаем в отдельную папочку к примеру exp_sozvezdie.
2. Создаем скрипт для загрузки TMS в BLOB
DELETE FROM GROUPS WHERE id=19999; SET BLOBFILE 'e:\TMS\Manager\exp_to_sozvezdie\TMS_SOZVEZDIE.hex'; INSERT INTO GROUPS (ID, PARENT_ID, CAPTION, GROUPTABLE, STATUS, INSERTDT, SYSTEMFLAG, DESCRIPTION, IMAGEINDEX, DATA, COLOR, SORTING, BASE_AGENT_ID, SID) VALUES (19999, 61, 'Выгрузка в созвездие', 'TMS', 0, '30-MAR-2019 16:54:30', 0, NULL, -1,:h00000000_7FFFFFFF, NULL, NULL, 0, NULL); commit;
Первая строчка удаляет из БД ТМС если она уже существует
SET BLOBFILE - этой командной мы указываем где хранится наша ТМС(выгруженная как hex и БД)
INSERT INTO GROUPS - тут собственно и происходит загрузка данных обратите внимание поле в которое будет загружен файл в VALUES содержит следующую запись - :h00000000_7FFFFFFF ее не меняем это служебное значение для IBScript
3. Копируем в эту папку файл IBEScript.exe и в этой же папке создаем BAT файл.
@echo off echo Start %time% set db_path='localhost:E:\Clients\ЭРИС\1\ZTRADE\ztrade.fdb' set source_path=E:\TMS\Manager\exp_to_sozvezdie\ echo Create Table,Triggers,Procedure for %%i in (*.sql) do ( IBESCRIPT.exe -N -D%db_path% -USYSDBA -Pmasterkey %source_path%%%i ) echo ***Complited*** pause
переменная db_path - содержит путь в какую базу мы будем загружать наши данные
переменная source_path - содержит путь до папки с нашими скриптами
Затем мы в цикле запускаем програvму IBEScript
IBESCRIPT.exe -N -D%db_path% -USYSDBA -Pmasterkey %source_path%%%i
если мы используем только один скрипт (а созданиее ТМС можно поместить в конец файла со скриптом) нам можно указать в место %source_path%%%i путь до него , а так же убрать цикл.
4. После всех действий у нас будет папочка со всеми нужными скриптами и BAT файл запускающий загрузку данных в таблицу.