DeepEdit!

Программирование баз данных на Oracle, техническая документация, литература, статьи и публикации

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Переносим объект из одного проекта ODI в другой.

Созданная в прошлом посте копия проекта W_Project1 поможет провести эксперимент по переносу объектов из одного проекта в другой. Если мы попробуем использовать переменную Variable1 из проекта W_Project1 в пакете проекта W_Project2 Дизайнер сообщит об ошибке:
Если необходимо использовать переменную из одного проекта в другом проекте, придется создать такую же переменную во втором проекте. Обычно, это не трудно. Достаточно перенести sql код обновления переменной и правильно установить тип и вид переменной.
А если необходимо использовать процедуру из десятка-другого шагов выполнения, копировать каждый шаг будет не очень быстрой процедурой. Моя попытка дуплицирования процедуры и последуюшего перетаскивания ее в другой проект тоже не завершилась успехом:
Чтобы перенести объект из одного проекта в другой необходимо использовать возможность ODI экспортировать и импортировать объекты через xml файлы.
Рассмотрим этот процесс подробнее.
Тестовая процедура для проверки создана в проекте W_Project1:
Попробуем сделать экспорт этой процедуры, удалим ее, а потом вставим в тот же проект при помощи импорта.
Особенности экспорта:
экспорт производится в локальную папку на той рабочей станции, с которой запущен Дизайнер;
папка для экспорта уже должна существовать;
файл со сгенерированным в формате xml описанием процедуры имеет вид TRT_имяпроцедуры.xml
Затем удалим процедуру и попробуем импортировать ее в наш проект:
Особенности импорта:
необходимо выбрать ту же папку на диске, куда мы производили экспорт;
необходимо выбрать из переченя файлов тот, в котором сохранена наша процедура;
необходимо выбрать тип импорта из четырех вариантов: дуплицирование, вставка, обновление, вставка-обновление (Duplication, Synonym Mode INSERT, Synonym Mode UPDATE, Synonym Mode INSERT_UPDATE).
У меня был выбран режим вставки-обновления, его и оставил. В итоге процедура успешной импортирована, но с ней произошло следующее:
Текст описания, который был введен кирилицей, после импорта превратился в последовательность вопросительных знаков. Так как проблемы русской кодировки мы уже решали, сверяемся со списком кодировок и ищем необходимые нам названия.
Попробуем повторить ту же последовательность действий, обновив предварительно описание процедуры, но укажем следующие кодировки при экспорте процедуры:
После удаления и импорта процедуры из файла с кодировкой будет все нормально:
Первую часть эксперимента можно считать успешно выполненной. Теперь попробуем импортировать процедуру в проект W_Project2. Для большей наглядности, я удалил все процедуры из второго проекта, предварительно удалив все пакеты, в которых эти процедуры использовались.
После импорта процедура не появилась. После нескольких проб вида: {повторить экспорт, повторить импорт, подумать} - я обнаружил причину. Все дело в режиме импорта. Покажу, в чем тут дело, на примерах:
Режим дуплицирования (Duplication).
Первый импорт добавляет процедуру к процедурам папки, повторный - создает копию процедуры в той же папке, как и при обычном дуплицировании:
Режим вставки (INSERT).
При импорте вставкой, даже если импортировать в папку проекта W_Project2, процедура добавляется в проекта W_Project1!. Повторный импорт не приводит к дуплицированию процедуры.
Если процедура после первого импорта была модифицирована, то она обновится. Что странно, так как такое поведение должно быть при режиме UPDATE:
Режим обновления (UPDATE).
В данном режиме результаты такие же, как и в предыдущем случае. Т.е. даже при импорте в папку во втором проекте процедура обновляется в первом проекте. Добавляется только такое окно предупреждения:
Режим вставки-обновления (INSERT_UPDATE).
Абсолютно аналогичное поведение, как и в режиме импорта UPDATE.
Выводы. Чтобы перенести процедуру из одного проекта в другой обязательно необходимо:
Правильно указать кодировку при экспорте.
При импорте обязательно выбрать режим дуплицирования (Duplication).







jAntivirus