Pentaho DI. Call DB Procedure Step для PostgreSQL.
Не получается у меня никак использовать этот степ для вызова хранимой процедуры PostgreSQL. Для вызова пользовательской функции с аналогичным функционалом - получается. Продемонстрирую пошагово.
Проведем подготовительную работу.
Создадим табличку в базе PostgreSQL, в которую просто будем складывать данные из хранимого кода.
create table dbo.t1 ( id bigint null, val1 bigint null, cr_date timestamp default current_timestamp);
Создадим хранимую процедуру и пользовательскую функцию - они будут просто инсертить в нашу табличку 1 строку.
create or replace function dbo.uf_ins_2_t1 (p_id bigint default 17 , p_val1 bigint default 43) returns void language plpgsql as $ begin insert into dbo.t1 (id, val1) values (p_id, p_val1); end; $;
create or replace procedure dbo.sp_ins_2_t1 (p_id bigint default -17 , p_val1 bigint default -43) language plpgsql as $ begin insert into dbo.t1 (id, val1) values (p_id, p_val1); end; $;
--вызов ф-ии do $ begin perform dbo.uf_ins_2_t1(); end; $; --проверим работу функции select * from dbo.t1 /*id val1 cr_date 17 43 2023-02-04 17:10:26.671*/
--вызов процедуры do $ begin call dbo.sp_ins_2_t1(-6,11); end; $; --проверим работу процедуры select * from dbo.t1 order by cr_date desc /*id val1 cr_date -6 11 2023-02-04 17:11:03.459 17 43 2023-02-04 17:10:26.671*/
Видим, оба программных объекта работают.
Отлично, пришло время сделать их вызов в Pentaho Data Integration. Создаём трансформацию, в которой первым степом передаём параметры в хранимый объект. (Кстати, степ Call DB Procedure не может быть первым степом в трансформации.)
Второй степ - как раз вызов пользовательской функции dbo.uf_ins_2_t1, пикча ниже:
Запускаем трансформацию, запуск успешен. Проверяем изменения в нашей табличке - всё ок.
Попробуем проделать то же самое, вызывая хранимую процедуру.
Запускаем, и смотрим результаты. Результаты разочаровывают. Ну и сам текст ошибки смотрится слегка издевательски:
"2023/02/04 18:41:16 - Call DB procedure (SP).0 - ERROR (version 9.1.0.0-324, build 9.1.0.0-324 from 2020-09-07 05.09.05 by buildguy) : Because of an error, this step can't continue:
2023/02/04 18:41:16 - Call DB procedure (SP).0 - Unable to call procedure
2023/02/04 18:41:16 - Call DB procedure (SP).0 - ОШИБКА: dbo.sp_ins_2_t1() — процедура
Hint: Для вызова процедуры используйте CALL.
Position: 15"
Такой вот кандибобер с этим степом. Могу лишь предположить, что оно разрабатывалось ещё до появления хранимых процедур в PostgreSQL. Как это проверить - увы, не знаю. В документации у меня даже этот степ не нашёлся, и как посмотреть в Jira https://jira.pentaho.com/secure/Dashboard.jspa баги и фичи Pentaho DI, - тоже не нашёл. Если есть какие-то советы, жду в комментах.