Створення тимчасових таблиць процедурами odi
Хочу розповісти про підхід, який я, як і багато моїх колег, використовують, коли необхідно створити тимчасову таблицю, яка буде використовуватися в завантаженнями.
На відміну від описаного тут алгоритму створення тимчасової таблиці через інтерфейс, я вважаю за краще використовувати для цих цілей процедури Oracle Data Integrator.
Чому іноді необхідне створення тимчасових таблиць? Всі причини, які я можу згадати, можна розділити на дві частини: обмеження ODI і особливості використовуваної СУБД, в яку завантажуються дані.
До обмежень ODI можна віднести:
- неможливість використання таких операторів SQL як Union, Minus, Intersect в інтерфейсах;
- . Якщо використовувати, наприклад, оператор Qualify необхідно одноразово, простіше зробити це в процедурі.
Отже, як же створити тимчасову таблицю в процедурі? Так, в общем-то, так само, як і через клієнтську програму СУБД. Необхідно написати SQL скрипт створення таблиці.
create table TEMP_GROUP
select GROUP from Source2
Далі цей текст необхідно вставити в процедуру, вказавши використовувану технологію і правильно вибравши схему БД.
Зазвичай використання тимчасових таблиць передбачає три етапи:
Ось якраз щоб розповісти, як однієї процедурою ODI впорається і з першим і з третім етапами, я і задумав написати цей пост.
Отже, створюємо процедуру з наступними кроками:
Для кожного кроку встановлюємо правильну технологію і схему БД, де цей крок процедури буде виконуватися, і не забуваємо там, де це може бути застосовано, вказувати тип лічильника:
Створюємо опцію процедури, назвемо її, наприклад, CreateTable. Встановимо для неї тип Check Box.
Далі, для кожного кроку процедури, крім першого, встановлюємо ознака умовного виконання кроку:
Для цього знімаємо позначку з Always Execute, і встановлюємо її навпроти опції CreateTable.
Для першого кроку встановлюємо ознака ігнорування помилок (Ignore Errors). Так ми робимо для того, щоб під час запуску процедури не було помилки, в разі якщо тимчасової таблиці в БД немає. Вірніше, видалення тимчасової таблиці перед її створенням є правильним підходом, так як можлива ситуація, коли пакет, який використовує цю процедуру, буде запущений після неуспішного попереднього запуску, при якому тимчасова наша таблиця була видалена з БД.
Підготовка закінчена. Далі використовуємо створену нами процедуру в пакеті два рази:
У цьому підході є, крім плюсів, і мінуси, зокрема, для використання тимчасової таблиці в інтерфейсі, її необхідно ще й створити в моделі.