вторник, 19 октября 2010 г.

Изучаем поведение переменных ODI.

Как я уже рассказывал, в пакете переменные могут быть объявлены, обновлены, им может быть установлено значение или они могут быть использованы для сравнения, с последующим изменением порядка выполнения пакета.

Недавно встретилась ситуация, когда в пакете была такая последовательность для одной переменной: Декларация -> Обновление -> Декларация.

И я решил проверить, это просто ошибка, или в этом есть какой-то смысл?

Для этого я подготовил набор проверок, в ходе выполнения которых я буду проверять следующие аспекты: наличие переменной в сценарии; значение переменной в пакете.

Часть 1. Пакеты.


Ситуация 1. Пакет, с установкой значения переменной.

сценарий: переменная присутствует;
значение: значение - пустая строка.


Ситуации 2-4. Пакет с деклараций, пакет с рефрешем, пакет со сравнением переменной.

сценарий: переменная присутствует;
значение: значения переменной нет, выдается ошибка java.lang.Exception: Variable has no value:



Часть 2. Сценарии. Проверяем только значение переменной.

Ситуация 5. Пакет с одной переменной дважды: (декларация -> обновление). При этом запускается сценарий из этого пакета без ввода значения переменной. При рефреше переменная принимает значение 5.


значение: после декларирования - пустая строка, после обновления - значение 5.


Ситуация 6. Тот же вариант, только в сценарий передается значение для переменной. Передается число 6.

значение: после декларирования 6, после обновления 5.



Ситуация 7. Аналогично предыдущему, только в пакет добавляется еще одна декларация переменной (декларация -> обновление -> декларация), а затем в сгенерированный сценарий передается значение 6.


значение: после декларирования - значение 6, т.е. ровно то, что передавалось в сценарий при запуске, после обновления - 5, после второго декларирования по-прежнему 5.


Выводы:
  • Если для переменной не установлен SQL текст обновления, ее обновление в пакете происходит, тем не менее, без ошибок.
  • Для того, чтобы сценарий имел возможность получать значение в переменную достаточно декларации переменной в пакете.
  • И наоборот, в пакете достаточно обновления переменной или установки ей значения для дальнейшего использования переменной в интерфейсах или процедурах.
  • Последовательное декларирование, обновление и снова декларирование переменной нивелирует переданное при запуске сценария значение этой переменной.

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

См. также:
Практика использования Oracle Data Integrator (ODI): Как создать workfow в ODI или что такое пакет?
Практика использования Oracle Data Integrator (ODI): Строим workflow на основе пользовательского ввода (User Input).

Комментариев нет:

Отправить комментарий