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

Создаем и используем функцию PL/SQL из ODI.

Третий пост на тему использования процедур и функций PL/SQL в Oracle Data Integrator. На этот раз я попробую создать функцию PL/SQL сам, чтобы использовать ее вместо постоянной процедуры и функции СУБД.

Зачем именно в 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 (улучшеная версия).

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

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