Недавно встретилась ситуация, когда в пакете была такая последовательность для одной переменной: Декларация -> Обновление -> Декларация.
И я решил проверить, это просто ошибка, или в этом есть какой-то смысл?
Для этого я подготовил набор проверок, в ходе выполнения которых я буду проверять следующие аспекты: наличие переменной в сценарии; значение переменной в пакете.
Часть 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).
Комментариев нет:
Отправить комментарий
Примечание. Отправлять комментарии могут только участники этого блога.