如何在 table 输入中传递参数?

How to Pass parameter in table input?

我有一份工作,里面有两个转变。

  1. 转换获取传递给另一个转换的数据列表。在这里,它针对第一次转换的每一行传递执行。

  2. 二次改造我用过

    "get row from result" -> "table input"

在 "get row from result" 中有五个字段,但在 table 输入中我必须只使用第二个位置和第三个位置字段。

即使我尝试给出单个参数“?”它给出错误

” 2017/06/29 15:11:02 - 从 table.0 获取数据 - 准备好的语句中设置值 #3 [String] 错误 2017/06/29 15:11:02 - 从 table.0 获取数据 - 参数索引超出范围(3 > 参数数量,即 2)。 “

我的查询很简单 select * 来自 table 其中 col1=? col2 = ?

我怎样才能做到这一点?错误?我做错了什么吗?

如果您有 5 个字段到达 table 输入,您需要将 5 个参数传递给您的查询,并且顺序正确。另外,每个参数只会被使用一次。

因此,如果您有 5 个字段并且只使用其中的 2 个,最好的方法是在从结果获取行和 Table 输入之间放置一个 select 值步骤,并且只让实际查询参数通过.

您还可以为参数命名,这样您的查询就变成了

select * from table where col1="${param2}" and col2="${param3}".

不要忘记选中 "Replace variable in script" 复选框,并根据您的 sql 方言调整引号(例如:'${param1}' 代表 SQL-Server)。

请注意,param2param3 必须存在于转换的 Settings/Parameters 中,没有 ${...} 装饰,并且具有不破坏 [=32= 的值].

参数的值可以在先前的转换中设置或更改,步骤为 Set variables(变量和参数在一阶近似中是同义的)并且范围至少为 Valid in the parent job

当然,如果您出于遗留目的或任何其他原因坚持使用未命名参数,您有责任告诉 PDI 要丢弃第一个参数,(例如 where (? is null or 0=0) and col1=? and col2=?