Зачем именно в ETL коде? Это, как я уже указывал, уменьшает объем передаваемого на деплой кода, и, самое главное, это удобнее при разработке.
Ведь после каждого изменения таблицы, которая используется в процедуре или функции данная процедура, а то и весь модуль, в котором она находится, становится невалидной в СУБД Oracle. А пересоздание процедуры при каждом запуске сценария позволяет не затрагивать своими экспериментами других пользователей.
Итак, я попробовал создать функцию в процедуре ODI по тому же принципу, по которому создавался модуль для возврата значения в переменную.
Создаем процедуру с одним шагом и в нем добавляем следующий код:
CREATE OR REPLACE FUNCTION TestQrt (p_value IN FLOAT) RETURN FLOAT IS
v_Result FLOAT := 0;
BEGIN
v_Result := p_value*p_value;
RETURN v_Result;
END TestQrt;
Устанавливаем технологию Oracle и выбираем правильную схему. Выполнив данную процедуру мы получим созданную в схеме БД функцию TestQrt. После к ней можно обратиться и получить результат прямо при обновлении переменной.
Больше того, сам текст функции можно изменять в ходе выполнения пакета. Для этого необходимо использовать переменные ODI. Например, так:
CREATE OR REPLACE FUNCTION TestQrt (p_value IN FLOAT) RETURN FLOAT IS
v_Result FLOAT := 0;
BEGIN
#SQL_Text
RETURN v_Result;
END TestQrt;
Так примерно будет выглядеть пакет:
См. также: Отправляем письмо из ODI (улучшеная версия).
Комментариев нет:
Отправить комментарий
Примечание. Отправлять комментарии могут только участники этого блога.