如何在 table 输入中传递参数?
How to Pass parameter in table input?
我有一份工作,里面有两个转变。
转换获取传递给另一个转换的数据列表。在这里,它针对第一次转换的每一行传递执行。
二次改造我用过
"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)。
请注意,param2
和 param3
必须存在于转换的 Settings/Parameters 中,没有 ${...}
装饰,并且具有不破坏 [=32= 的值].
参数的值可以在先前的转换中设置或更改,步骤为 Set variables
(变量和参数在一阶近似中是同义的)并且范围至少为 Valid in the parent job
。
当然,如果您出于遗留目的或任何其他原因坚持使用未命名参数,您有责任告诉 PDI 要丢弃第一个参数,(例如 where (? is null or 0=0) and col1=? and col2=?
。
我有一份工作,里面有两个转变。
转换获取传递给另一个转换的数据列表。在这里,它针对第一次转换的每一行传递执行。
二次改造我用过
"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)。
请注意,param2
和 param3
必须存在于转换的 Settings/Parameters 中,没有 ${...}
装饰,并且具有不破坏 [=32= 的值].
参数的值可以在先前的转换中设置或更改,步骤为 Set variables
(变量和参数在一阶近似中是同义的)并且范围至少为 Valid in the parent job
。
当然,如果您出于遗留目的或任何其他原因坚持使用未命名参数,您有责任告诉 PDI 要丢弃第一个参数,(例如 where (? is null or 0=0) and col1=? and col2=?
。