Plsql 在Pentaho(PDI)中使用Call db procedure步骤时使用自定义数量的参数

Plsql 在Pentaho(PDI)中使用Call db procedure步骤时使用自定义数量的参数,plsql,pentaho,pentaho-spoon,pentaho-data-integration,Plsql,Pentaho,Pentaho Spoon,Pentaho Data Integration,说明: 最近,我一直在尝试使用Pentaho PDI自动化一些工作任务,我遇到了一个问题,我没有运气解决/找到解决方案,因为我做了很多小时的研究,也一直试图自己解决它。我的目标是加载一个文本文件,其中包含存储在服务器上的PL/SQL过程的名称,以及该过程的自定义参数数量。例如,如果源文本文件将包含以下文本: Test_schema.job_pkg.run_job;12345 它应该从定义的连接运行job_pkg.run_作业过程,并使用12345作为单个参数 问题是: Call DB proce

说明:

最近,我一直在尝试使用Pentaho PDI自动化一些工作任务,我遇到了一个问题,我没有运气解决/找到解决方案,因为我做了很多小时的研究,也一直试图自己解决它。我的目标是加载一个文本文件,其中包含存储在服务器上的PL/SQL过程的名称,以及该过程的自定义参数数量。例如,如果源文本文件将包含以下文本:

Test_schema.job_pkg.run_job;12345

它应该从定义的连接运行job_pkg.run_作业过程,并使用12345作为单个参数

问题是:

Call DB procedure转换步骤只接受SET AMOUNT参数,例如,我将该步骤设置为接受4个参数,但我调用的过程只接受1个参数。我希望能够忽略步骤中设置的其他参数。例如,当我尝试只发送一个参数,但步骤设置为接受4个参数时,它抛出:

调用数据库过程。0-ORA-06550:第1行第7列:

PLS-00306:调用“运行作业”时参数的数量或类型错误

ORA-06550:第1行第7列:PL/SQL:语句被忽略

到目前为止,我所拥有的:

我做了一项工作,启动转换,将源文件的内容加载到内存中,使用修改后的Java脚本值将其拆分为正确的字段,使用提取的值设置Pentaho变量,然后加载第二个转换,读取这些变量并将其作为字段传递到调用DB过程步骤。最后一步总是失败,除非我手动删除所有未使用的参数

解决方案:

根据AlainD的回答,我尝试使用开关/案例步骤来解决问题。现在关于值的转换有不同的问题。若我传递一个数字,但在Call DB过程的参数中将其设置为字符串,它将抛出

ORA-01403未找到任何数据

这可以通过修改Java脚本值步骤或任何其他步骤处理数据来解决,以便将数据转换为正确的格式


在这种情况下,我要做的是在一个字符串中构建一个SQL命令,比如Test_schema.job_pkg.run_job12345,然后用一个执行SQL脚本执行它


另一种解决方法是在修改的Javascript步骤中控制参数的数量,并使用开关/案例在一系列DB过程步骤上重定向流:一个带有0个参数,一个带有1个参数,一个带有2个参数,。。。此方法假定最大参数数很小。

我尝试过执行SQL脚本方法,但由于某些原因,它从不允许我运行该过程。我已经花了3天的时间来摆弄这个方法,但实际上并没有让Pentaho在这个问题上执行它。我将研究开关/案例方法,并将返回更多信息。根据您的编辑,它表明您找到了解决方案。谢谢你的信任。