如何在Pentaho(PDI)中调用多个Oracle存储过程

如何在Pentaho(PDI)中调用多个Oracle存储过程,oracle,stored-procedures,pentaho,kettle,Oracle,Stored Procedures,Pentaho,Kettle,我有下一个脚本,我正试图在Pentaho数据集成中作为作业/转换运行——它取自Toad,在那里它按预期工作 begin SOME_PACKAGE.SOMESTOREDPROCEDURE; SOME_PACKAGE2.SOMESTOREDPROCEDURE2; end; / 我尝试了两个步骤调用DB过程(一个接一个),但它的行为方式不同-第一个过程设置一些参数,第二个过程尝试使用它们,但有两个步骤-第二个过程的参数没有设置 我试过使用step Execute SQL脚本,但似乎我不知道如何从

我有下一个脚本,我正试图在Pentaho数据集成中作为作业/转换运行——它取自Toad,在那里它按预期工作

begin
 SOME_PACKAGE.SOMESTOREDPROCEDURE;
 SOME_PACKAGE2.SOMESTOREDPROCEDURE2;
end;
/
我尝试了两个步骤调用DB过程(一个接一个),但它的行为方式不同-第一个过程设置一些参数,第二个过程尝试使用它们,但有两个步骤-第二个过程的参数没有设置

我试过使用step Execute SQL脚本,但似乎我不知道如何从那里调用这些过程。 第一个过程有一个可选参数,第二个过程没有

我试过了

begin
 SOME_PACKAGE.SOMESTOREDPROCEDURE;
 SOME_PACKAGE2.SOMESTOREDPROCEDURE2;
end;
(获取ORA-06550:第2行第32列:PLS-00103:遇到符号“文件结束”)

(get ORA-00900:无效的SQL语句)

获取(ORA-00911:无效字符)

(get ORA-00900:无效的SQL语句)


或者相同,但添加了模式前缀-结果相同。

在PDI中,所有步骤都以并行方式执行。因此,如果调用2个或更多的DB过程步骤,它将并行执行。根据你的问题,这不是你想要实现的。实现的唯一方法是添加两个单独的转换(.ktr)文件,并在每个文件中调用“DB Procedure”步骤


希望这有帮助:)

在PDI中,所有步骤都是并行执行的。因此,如果调用2个或更多的DB过程步骤,它将并行执行。根据你的问题,这不是你想要实现的。实现的唯一方法是添加两个单独的转换(.ktr)文件,并在每个文件中调用“DB Procedure”步骤


希望这有帮助:)

我试过这样做——有一个包含两个转换的作业,每个人都调用一个DB过程,但结果是,当涉及到第二个存储过程时,它仍然看到参数没有改变。这不可能通过执行SQL脚本步骤来完成吗?我试过这样做——有一个包含两个转换的作业,每个人都在调用一个DB过程,但结果是,当涉及到第二个存储过程时,它再次看到参数不变。这不可能通过执行SQL脚本步骤来完成吗?您是否选中了您尝试的第一个选项中的
Execute for each row?
复选框(在
Execute SQL Script
)?您是否考虑过编写一个调用第一个和第二个过程的包装过程?从Pentaho来看,这将被视为一个事务,我为每行检查了
Execute
,但没有帮助。问题是我有20个不同的案例用于
SOMESTOREDPROCEDURE2
,我不认为为所有案例编写包装器是个好主意。我想我会尝试一种新的方法来解决这个问题。无论如何,听起来很奇怪,在
执行SQL脚本
中,您无法编写所有内容。很抱歉,我混淆了复选框,您必须选中
执行SQL脚本
中的
作为单个语句执行
复选框。在这种情况下应该可以工作。您是否选中了尝试的第一个选项(在
executesql script
中)中的
Execute for each row?
复选框?您是否考虑过编写一个包装过程来调用第一个和第二个过程?从Pentaho来看,这将被视为一个事务,我为每行检查了
Execute
,但没有帮助。问题是我有20个不同的案例用于
SOMESTOREDPROCEDURE2
,我不认为为所有案例编写包装器是个好主意。我想我会尝试一种新的方法来解决这个问题。无论如何,听起来很奇怪,在
执行SQL脚本
中,您无法编写所有内容。很抱歉,我混淆了复选框,您必须选中
执行SQL脚本
中的
作为单个语句执行
复选框。在这种情况下,它应该起作用。
SOME_PACKAGE.SOMESTOREDPROCEDURE;
SOME_PACKAGE2.SOMESTOREDPROCEDURE2;
 CALL SOME_PACKAGE.SOMESTOREDPROCEDURE;
 CALL SOME_PACKAGE2.SOMESTOREDPROCEDURE2;
EXEC SOME_PACKAGE.SOMESTOREDPROCEDURE;
EXEC SOME_PACKAGE2.SOMESTOREDPROCEDURE2;