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

eda190

描述:

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

test_schema.job_pkg.run_job;12345

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

问题:

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

调用 DB Procedure.0 - ORA-06550:第 1 行,第 7 列:

PLS-00306:调用“RUN_JOB”时参数的数量或类型错误

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

到目前为止我所拥有的:

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

我对 Call DB Procedure 步骤的当前设置

解决方案:

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

ORA-01403 未找到数据

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

最终转换视图

阿兰

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章