说明:
最近,我一直在尝试使用Pentaho(PDI)使工作中的某些任务自动化,而且遇到一个问题,我没有运气来解决/查找解决方案(我做了很多小时的研究,也可以自己解决)。我的目的是加载一个文本文件,其中包含存储在服务器上的PL / SQL过程的名称,以及该过程的自定义参数量。例如,如果源文本文件将包含以下文本:
Test_schema.job_pkg.run_job; 12345
它应该从定义的连接运行job_pkg.run_job
过程,并将12345
用作单个参数。
问题:
Call DB procedure
转换步骤仅接受SET大量的参数,例如,我将步骤设置为接受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脚本值”步骤或任何其他步骤处理数据以将数据转换为“正确”格式来解决此问题。
答案 0 :(得分:1)
在这种情况下,我要做的是在字符串中构建一个SQL命令,类似于Test_schema.job_pkg.run_job(12345)
,并使用Execute SQL script
执行它。
另一种解决方法是在Modified Javascript
步骤中控制参数数量,并使用Switch/Case
在一系列DB Procedure
步骤中重定向流:一个参数为0 ,一个带有1个参数,一个带有2个参数,......此方法假定最大参数数量很小。