DeepEdit!

Программирование баз данных на Oracle, техническая документация, литература, статьи и публикации

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Создаем и используем функцию 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;
Так примерно будет выглядеть пакет:







jAntivirus