Использование пользовательского количества параметров при использовании шага процедуры Call db в Пентахо (PDI) - PullRequest
0 голосов
/ 17 октября 2018

Описание:

Недавно я пытался автоматизировать некоторые задачи на работе с помощью Pentaho (PDI), и я столкнулся с проблемой, которую мне не удалось решить/ найти решение для (я проводил исследования в течение многих часов, также пытался решить это самостоятельно).Моя цель - загрузить текстовый файл, содержащий имя процедуры PL / SQL, хранящейся на сервере, и пользовательское количество параметров для процедуры.Например, если исходный текстовый файл будет содержать следующий текст:

Test_schema.job_pkg.run_job; 12345

Он должен запустить job_pkg.run_job процедуру из определенного соединения, ииспользуйте 12345 в качестве единственного параметра.

Проблема:

Шаг преобразования Call DB procedure принимает только количество параметров SET, например, я установил шаг напринять 4 параметра, но процедура, которую я вызываю, принимает только 1 параметр.Я хочу иметь возможность игнорировать другие параметры, установленные в шаге.Когда я пытаюсь отправить, например, только один параметр, но шаг настроен на прием 4-х параметров, он выдает:

Вызов процедуры БД.0. - ORA-06550: строка 1, столбец 7:

PLS-00306: неверный номер или типы аргументов при вызове 'RUN_JOB'

ORA-06550: строка 1, столбец 7: PL / SQL: оператор игнорируется

Что у меня есть:

Я выполнил задание, которое запускает преобразование, которое загружает содержимое исходного файла в память, разбивает его на правильные поля с помощью Modified Java Script value,устанавливает переменные Pentaho с извлеченными значениями, затем загружается второе преобразование, которое считывает эти переменные и передает их в виде полей на шаг Call DB procedure.Последний шаг всегда терпит неудачу, если я вручную не удаляю все неиспользуемые аргументы.

My current settings for Call DB Procedure step

Решение:

На основе AlainD ответ Я пытался использовать шаг Switch / Case, который решил проблему.В настоящее время существует другая проблема, связанная с преобразованием значений.Если я передаю число, но задаю его как STRING в параметрах Call DB Procedure, оно выдает

ORA-01403, данные не найдены

Это можно решить с помощью обработкиданные с помощью шага Modified Java Script Value или любого другого шага для преобразования данных в «правильный» формат.

Final transformation view

1 Ответ

0 голосов
/ 18 октября 2018

Что я делаю в подобных случаях, так это чтобы создать команду SQL в строке, что-то вроде Test_schema.job_pkg.run_job(12345) и выполнить ее с Execute SQL script.

Другим обходным решением будет ограничение числапараметров на шаге Modified Javascript и используйте Switch/Case для перенаправления потока на последовательность шагов DB Procedure: один с 0 параметрами, один с 1 параметром, один с 2 параметрами, ... Этот метод предполагает, чтоМаксимальное количество параметров мало.

...