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

时间:2017-06-28 10:19:09

标签: pentaho kettle pdi

我有一份工作,其中有两处转型。

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

  2. 在第二次转型中我使用了

    "从结果中获取行" - > "表输入"

  3. 在"从结果中获取行"有五个字段但在表输入中我只需要使用第二个位置和第三个位置字段。

    即使我试图给出单一的参数"?"给出错误

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

    我的查询非常简单 select * from table where col1 =?和col2 =?

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

2 个答案:

答案 0 :(得分:5)

您还可以为参数指定名称,以便查询成为

  

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

别忘了检查脚本中的"替换变量"复选框,并使引号适应您的sql方言(例如:'${param1}'用于SQL-Server)。

请注意,param2param3必须存在于转化的设置/参数中,没有${...}装饰,并且值不会破坏SQL。

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

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

答案 1 :(得分:2)

如果有5个字段到达表输入,则需要将5个参数传递给查询,并按正确的顺序传递。此外,每个参数只能使用一次。

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