понедельник, 29 ноября 2010 г.

Ошибка обновления переменной No value to affect to...

Если в пакете мы используем обновление некоторой переменной (Refresh) ODI выполняет указанный SQL скрипт для получения значения этой переменной. Но если указанный скрипт не возвращает ни одной записи появляется такая ошибка: "No value to affect to this variable for DefDate..."


В этом случае просто вызываем Оператор, смотрим на вкладку Description для шага обновления переменной, копируем оттуда SQL скрипт и пытаемся его выполнить в клиентском приложении СУБД.

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

И вот, когда в процессе разработки, таких ситуаций становится все больше, у разработчика может возникнуть желание, временно конечно, установить для переменной значение по-умолчанию:


или модифицировать SELECT для обновления переменной так, чтобы он возвращал значение, даже если его нет в таблице источнике:

select coalesce(max(param_value, -1)
from t_params
where param_name = 'Param Name Invalid'


На мой взгляд, так делать нельзя. Ведь отсутствие значения для переменной, а, следовательно, и падение сценария загрузки данных в некую таблицу, может явиться сигналом того, что процесс загрузки пошел не совсем так, как ожидалось. Например, при переносе сценариев в промышленную среду загрузки ХД, скрипты добавления параметров не были выполнены, или были выполнены не до конца. Лучше, в таком случае, чтобы сценарий завершился с ошибкой, чем если в целевую таблицу запишутся не те данные из переменной, которая получила значение по-умолчанию.

Еще о переменных ODI.

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

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