描述:
最近我一直在尝试使用 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
一步。最后一步总是失败,除非我手动删除所有未使用的参数。
解决方案:
基于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] 删除。
我来说两句