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

Using custom number of parameters while using Call db procedure step in Pentaho (PDI)

描述:

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

Test_schema.job_pkg.run_job;12345

它应该运行 job_pkg.run_job 来自定义的连接的过程,并使用12345 作为单个参数。

问题:

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

Call DB Procedure.0 - ORA-06550: row 1, column 7:

PLS-00306: wrong number or types of arguments in call to 'RUN_JOB'

ORA-06550: row 1, column 7: PL/SQL: Statement ignored

我目前有:

我做了一个开始转换的工作,将源文件的内容加载到内存中,使用 Modified Java Script value 将其拆分为正确的字段,使用提取的值设置 Pentaho 变量,然后加载第二个转换,读取这些变量并将它们作为字段传递给 Call DB procedure 步骤。除非我手动删除所有未使用的参数,否则最后一步总是失败。

解法:

根据 AlainD 的回答,我尝试使用解决问题的 Switch / Case 步骤。现在关于值的转换有不同的问题。如果我传递一个数字但在 Call DB Procedure 的参数中将其设置为 STRING,它会抛出

ORA-01403 no data found

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

在这种情况下,我所做的是在字符串中构建一个 SQL 命令,例如 Test_schema.job_pkg.run_job(12345) 并使用 Execute SQL script.

执行它

另一种解决方法是控制 Modified Javascript 步骤中的参数数量,并使用 Switch/Case 将流程重定向到一系列 DB Procedure 步骤:一个与0个参数,一个有1个参数,一个有2个参数,...这个方法假设参数的最大数量很小。