在 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个参数,...这个方法假设参数的最大数量很小。
描述:
最近我一直在尝试使用 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个参数,...这个方法假设参数的最大数量很小。